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 元素(例如&lt;option&gt; 元素)等...例如:

<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 不起作用。 &lt;param name="includeProperties"&gt;divisionList&lt;/param&gt;

以上是关于Struts 2 操作未将所需结果返回给 Jquery Ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章

struts2,ajax,json传json给Action中的类对象,并返回需要的数据

Struts2数据操作(第二例)

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

如何使用基于策略的授权将所需的声明附加到令牌?

struts2结果页面配置与表单数据的操作

将 JSF2 托管 pojo bean 传递到 EJB 或将所需内容放入传输对象