【问题标题】:Struts 2 action not returning desired result to Jquery Ajax callStruts 2 操作未将所需结果返回给 Jquery Ajax 调用
【发布时间】: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> 

响应

我只需要从动作类返回的数组列表。

【问题讨论】:

    标签: java jquery json ajax struts2


    【解决方案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;
    猜你喜欢
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2015-02-27
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多