我知道在Struts2中可以使用json插件返回json类型结果。一个json也可以从返回的stream结果像这样的答案。
json
stream
在Struts2文档页面上,使用JSP的Ajax结果,我发现可以dispatcher使用输出JSON的JSP 返回类型结果。
dispatcher
<%@ page import="java.util.Iterator, java.util.List, com.esolaria.dojoex.Book, com.esolaria.dojoex.BookManager" %> <% String bookIdStr = request.getParameter("bookId"); int bookId = (bookIdStr == null || "".equals(bookIdStr.trim())) ? 0 : Integer.parseInt(bookIdStr); Book book = BookManager.getBook(bookId); if (book != null) { out.println(book.toJSONString()); System.out.println("itis: " + book.toJSONString()); } %>
但是它正在使用scriptlet向外部写入JSON。我知道强烈建议不要在JSP中使用scriplets。但是在这个问题中我找不到我的问题的答案。如何避免JSP文件中的Java代码?。如何使用JSP结果生成JSON对象?是否有更好的方法从JSP返回JSON对象?
您可以通过dispatcher结果返回JSP ,然后使用<s:property />标记调用一个操作方法,该方法将返回JSP中的序列化数据。
<s:property />
您还应该contentType为您的JSP 表达权利:
contentType
public class DispatcherJsonAction extends ActionSupport { private Book book; @Action("dispatcherJson") @Result(name = ActionSupport.SUCCESS, location = "page.jsp") public String execute(){ book = loadBookSomeHow(); return SUCCESS; } public String getJsonBook(){ Gson gson = new Gson(); try { return gson.toJson(book); } catch (Exception e){ return gson.toJson(e.getMessage()); } } }
page.jsp:
<%@page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <s:property value="jsonBook" />