【问题标题】:How to use ajax response list as struts2 iterator value?如何使用 ajax 响应列表作为 struts2 迭代器值?
【发布时间】:2014-08-02 10:08:35
【问题描述】:

我正在使用以下 ajax 函数:

 $.ajax({
       url: "userhomeonload",
       contentType: 'application/json',
       type: 'POST',
      datatype:'json', 
       async: true,
       success: function (res) {
                 alert(res[i].name+" "+res[i].rollNo);
    }  });

我在警告框中得到了正确的结果。 现在我想在struts迭代器中使用这个ajax返回的列表,如下所示:

<s:iterator value="list">
   <div>
     <s:property value='name'></s:property>
     <s:property value="rollNo"></s:property>
   </div>
</s:iterator> 

但屏幕上没有显示任何内容。谁能告诉我该怎么做?

【问题讨论】:

  • 返回一个 JSP,而不是 JSON,并在那里迭代。
  • 或者使用js添加元素。
  • @Andrea Ligios,我不明白你的意思。请解释一下你在说什么。还有我该怎么做?
  • 当您在 Struts2 中执行 AJAX 调用时,通常返回的两种主要结果类型是:1) JSON - 首选、更新、更小且方便。您不能在对象上使用 struts 标签,您需要使用 JavaScript 对其进行操作或迭代; 2) JSP - 一个 JSP sn-p(例如只有您的迭代器,以及 struts-tags taglib 的声明),并将其应用于页面中的元素,例如 div。这样,您可以在结果应用到页面之前在结果上使用 struts 标记。知道了 ? :)
  • 如何实施您的第二个选项?

标签: ajax struts2


【解决方案1】:

实际上幕后发生的事情是在您调用 ajax 之后,您只获得 JSON 对象,但“list”的值

<s:iterator value="list">

OGNL 不会将 valuestack 映射到结果页面,要在您的情况下使用这种方法,您必须使用 JS 设置属性。

正如 Andrea 正确解释的那样,如果您将结果作为 JSP 返回,那么您的操作对象的所有属性都将由 OGNL 映射到相应的 UI 标记。

【讨论】:

    【解决方案2】:

    @AndreaLigios 请解释第二种结果,即 JSP sn-p。我不知道如何使用 JSP sn-p 作为 ajax 响应。

    Main.jsp(完整)

    <%@ taglib prefix="s" uri="struts-tags.tld" %>
    <html>
        <head>
            <script>
                $(function(){   
                    $('#loader').on("keypress click", function(e) {
                        $.ajax({
                            url: "<s:url action='ajaxAction'/>",
                        }).done(function(result) {
                            $("#target").html(result);
                        });
                    });
                });
            </script>   
        </head>
        <body>
            <input type="button" id="loader" />
            <div id="target"></div>
        <body>
    </html>
    

    Struts.xml(相关)

    <action name="ajaxAction" class="foo.bar.AjaxAction">
        <result>Snippet.jsp</result>
    </action>
    

    AjaxAction(相关)

    private String testString;
    /* Getter and Setter */
    
    public String execute(){
       testString = "I'm loaded with AJAX";
       return SUCCESS;
    }
    

    Snippet.jsp(完整)

    <%@ taglib prefix="s" uri="struts-tags.tld" %>
    
    <!-- This is the result page. You can use Struts tags here, 
    the generated HTML will be appended to the target div. -->
    
    TestString: <s:property value="testString" />
    

    输出:

    <body>
        <input type="button" id="loader" />
        <div id="target">TestString: I'm loaded with AJAX</div>
    <body>
    

    【讨论】:

    • 这是有效的。我想再问 1 个问题。我的 Snippet.jsp 中的内容将包含在展示中。现在展示插件在 Main.jsp 中不起作用。你能建议我有任何解决方案
    • 很高兴有帮助。我不知道展示插件是什么或为什么它不起作用(不再起作用?)。但这听起来像是一个全新的问题,所以我建议您打开一个新的、描述清楚的问题以获得更好的帮助
    • 我只是得到“成功”而不是“我的消息”作为对我的 ajax 请求的响应。我的代码看起来和上面几乎一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2022-08-14
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多