我知道在Struts2中可以使用json插件返回json
类型的结果。还可以从json
结果中stream
结果返回dispatcher
。
在this的Struts2文档页面上,我发现可以使用输出JSON的JSP返回<%@ 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());
}
%>
类型的结果。
{{1}}
但它正在使用scriptlet将JSON写入out。我知道在JSP中使用scriplet非常气馁。但是我在这个问题Ajax result with JSP中找不到我的问题的答案。如何使用JSP结果生成JSON对象?有没有更好的方法从JSP返回JSON对象?
答案 0 :(得分:2)
您可以通过dispatcher
结果返回JSP,然后使用<s:property />
标记来调用将返回JSP中的序列化数据的操作方法。
您还应该为您的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" />