Struts 2 操作未将所需结果返回给 Jquery Ajax 调用
Posted
技术标签:
【中文标题】Struts 2 操作未将所需结果返回给 Jquery Ajax 调用【英文标题】:Struts 2 action not returning desired result to Jquery Ajax call 【发布时间】:2016-07-10 14:10:10 【问题描述】:我正在使用以下代码从 jQuery Ajax 调用一个操作,它会返回 JSP 页面的完整代码。我只需要在动作类中定义的数组列表。
dashboard.js
$.ajax(
url : 'ELD/getAllDivisions',
type : 'POST',
dataType: 'text/javascript',
success : function(data)
alert("success");
var response = data;
alert(response);
);
DivisionAction.java
@Autowired
private DivisionService divisionService;
private List<DivisionModel> divisionList = new ArrayList<DivisionModel>();
public String getAllDivisions()
divisionList = divisionService.getAllDivisions();
return SUCCESS;
struts.xml
<constant name="struts.devMode" value="true" />
<package name="DIVISION" namespace="/" extends="struts-default">
<action name="getAllDivisions" method="getAllDivisions" class="foo.bar.DivisionAction">
<result name="success">/jsp/users/AdminDashboard.jsp</result>
</action>
响应
我只需要从动作类返回的数组列表。
【问题讨论】:
【参考方案1】:你有两种方法:
旧的(不必要的复杂)方式
返回一个 JSP,在 JSP 中迭代您的列表并执行您需要的任何操作:创建一个 JSON 数组,或编写 html 元素(例如<option>
元素)等...例如:
<action name="getAllDivisions" method="getAllDivisions" class="foo.bar.DivisionAction">
<result name="success">/jsp/users/allDivisions.jsp</result>
</action>
allDivisions.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
[
<s:iterator value="divisionList" status="ctr">
"id" : "<s:property value='modelId' />",
"modelName" : "<s:property value='modelName' />"
<s:if test="%#ctr.count < divisionList.size"> , </s:if>
</s:iterator>
]
新的(正确的)方式
使用 JSON 插件,返回 JSON 结果,指定您的 List 作为根对象 (read more):
<package name="DIVISION" namespace="/" extends="json-default">
<action name="getAllDivisions" method="getAllDivisions" class="foo.bar.DivisionAction">
<result name="success" type="json>
<param name="root"> divisionList </param>
</result>
</action>
【讨论】:
Old 方式并不是那么可怕,如果响应应该只包含在 jsp 中(即不需要在 js 中操作响应)。 链接的问题不应该涵盖如何返回 JSON 结果的主题,它掩盖了我的答案,即使用三种返回 JSON 结果的方式,my question 中的一种从未被任何人覆盖。 新(正确)方式工作并产生了我想要的。谢谢。 为什么返回带有includeProperties
的列表会总是返回一个空列表?我遇到了这个问题,我可以使用这个答案,但不明白为什么 includeProperties
不起作用。 <param name="includeProperties">divisionList</param>
以上是关于Struts 2 操作未将所需结果返回给 Jquery Ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章
struts2,ajax,json传json给Action中的类对象,并返回需要的数据