如何在 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,只有一个<s:property/>
...顺便说一句,未删除。
我真的很好奇,你能解释一下这么多编辑和取消投票背后的原因吗?并不是说我有什么可抱怨的,我一直都是为了活下去,我只是很困惑。请不要在回复之前标记此评论,然后我会自己删除它,因为它是OT。
@AndreaLigios 我认为这将有助于将来对我的帖子进行投票,因为目前它不公平。我不会举报,反正没有正义,可能下次你发表冒犯性评论时,不要这样做,你是个好人。
【参考方案1】:
您可以通过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" />
【讨论】:
以上是关于如何在 Struts 2 中使用 JSP 返回 JSON 结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?
如何对checkboxlist使用XML验证并在JSP上的Struts 2中选择?