如何在Struts 2中使用JSP返回JSON结果

时间:2016-03-02 17:17:02

标签: java json ajax jsp struts2

我知道在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对象?

1 个答案:

答案 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" />