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

Posted

技术标签:

【中文标题】如何在 Struts 2 中使用 JSP 返回 JSON 结果【英文标题】:How to return a JSON result with JSP in Struts 2 【发布时间】:2016-06-15 16:50:41 【问题描述】:

我知道在Struts2中可以使用json插件返回一个json类型的结果。 json 也可以从 stream 结果返回,如 this 答案。

在 Ajax result with JSP 的 Struts2 文档页面上,我发现可以使用输出 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 是非常不鼓励的。但是我在这个问题How can I avoid Java code in JSP files, using JSP 2? 中找不到我的问题的答案。如何使用 JSP 结果生成 JSON 对象?有没有更好的方法从 JSP 返回 JSON 对象?

【问题讨论】:

这仅仅是一种风格上的练习,还是背后有一个真实的用例,这将导致使用来自 DISPATCHER 结果的 JSON 而不是使用 JSON 或 STREAM 获取它的某种好处结果如常?这一切从何而来,意义何在? @AndreaLigios 代码中使用的样式很糟糕,因为它使用的是小脚本。顺便说一句,如果您取消删除它,我会接受答案。 我的代码中没有看到 scriptlet,只有一个 &lt;s:property/&gt;...顺便说一句,未删除。 我真的很好奇,你能解释一下这么多编辑和取消投票背后的原因吗?并不是说我有什么可抱怨的,我一直都是为了活下去,我只是很困惑。请不要在回复之前标记此评论,然后我会自己删除它,因为它是OT。 @AndreaLigios 我认为这将有助于将来对我的帖子进行投票,因为目前它不公平。我不会举报,反正没有正义,可能下次你发表冒犯性评论时,不要这样做,你是个好人。 【参考方案1】:

您可以通过dispatcher结果返回一个JSP,然后使用&lt;s:property /&gt;标签调用一个动作方法,该方法将返回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" />

【讨论】:

以上是关于如何在 Struts 2 中使用 JSP 返回 JSON 结果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?

如何对checkboxlist使用XML验证并在JSP上的Struts 2中选择?

struts2后台返回json到jsp页面

jsp使用jquety $.ajax()传参数。struts2 action 如何接收所传的值

如何在jsp页面中使用struts2标签

struts 返回jsp 样式都不见了 样式路径不对