尝试使用 struts 中的 ajax 更新 jsp 页面上的内容时出现问题(触发 onChange 事件时)

Posted

技术标签:

【中文标题】尝试使用 struts 中的 ajax 更新 jsp 页面上的内容时出现问题(触发 onChange 事件时)【英文标题】:Problem while trying to update content on a jsp page using ajax in struts (when onChange event is fired) 【发布时间】:2011-08-10 11:53:21 【问题描述】:

当 onChange 事件被另一个下拉列表的选择更改触发时,我正在尝试更新下拉列表。

我有两种方法:

1.) 我尝试使用 dojo 使用异步调用,但在这种情况下,虽然我能够异步调用一个动作,但是当执行该动作时,它不会更新下拉列表的内容。我想我错过了一些刷新下拉菜单内容的代码。

代码如下:

JSP 页面:

<%@taglib uri="/struts-tags" prefix="s" %>
<%@taglib uri="/struts-dojo-tags" prefix="sd" %>

<s:url id="scriptURL" action="getLists" /> 
<sd:a href="%scriptURL" listenTopics="getLists" formId="dayReport" showLoadingText="Working..."/>

<s:form action="viewDayReport" id="dayReport">
<s:select label="Customer " name="customer" headerKey="0" headerValue="Select" list="customerList" onchange="dojo.event.topic.publish('getLists');"/>
<s:select label="Contact "  name="contact"  headerKey="0" headerValue="Select" list="contactList"  onchange="dojo.event.topic.publish('getLists');"/>
<s:select label="Employee " name="employee" headerKey="0" headerValue="Select" list="employeeList" onchange="dojo.event.topic.publish('getLists');"/>
<s:select label="Stage "    name="stage"    headerKey="0" headerValue="Select" list="stageList"    onchange="dojo.event.topic.publish('getLists');"/>
<s:select label="Type "     name="type"     headerKey="0" headerValue="Select" list="typeList"     onchange="dojo.event.topic.publish('getLists');"/>
<sd:datetimepicker label="Date" name="date" displayFormat="dd/MM/yyyy"                             onchange="dojo.event.topic.publish('getLists');"/>
<s:submit value="View Report(s)"/>
</s:form>

动作:

The action sets all the 5 lists required in the <s:select> tags in the page.
The lists are getting generated properly, I have checked.

struts 配置:

<struts>
<!-- Add your configuration elements here -->
<package name="Deutek.admin" extends="struts-default" >
    <result-types>
        <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" />
    </result-types>
    <action name="dayReportPage" class="admin.dayReportAction">
        <result type="tiles">dayReport</result>
    </action>

    //This is the action mapping which maps the action in use.(Notice that the above action is also forwarding to the same page, it is the action which first time displays the page.)

    <action name="getLists" class="admin.getLists">
        <result type="tiles">dayReport</result>
    </action>
</package>
</struts>

2.) 我通过谷歌搜索找到的第二种方法需要在 jsp 页面上编写以下 java 脚本

function retrieveURL(url) 

if (window.XMLHttpRequest) 
 
// Non-IE browsers
            req = new XMLHttpRequest();       
            req.onreadystatechange = processStateChange;
            try 
                 req.open("GET", url, true);
             catch (e) 
                 alert(e);
            
            req.send(null);
         else if (window.ActiveXObject)  // IE

             req = new ActiveXObject("Microsoft.XMLHTTP");
            if (req) 
                 req.onreadystatechange = processStateChange;
                 req.open("GET", url, true);
                 req.send();
             
        
  

这里的“req.open”需要“url”作为参数。这里我不明白 URL 应该是什么,以便调用我在第一个方法中提到的操作类。

请告诉我在第一种方法中我缺少哪些代码,用于使用操作类设置的新列表更新下拉列表。

还有第二种方法中的 URL 应该是什么。

您认为哪种方法更好。

请尽快帮忙。

谢谢!!

【问题讨论】:

我希望我已经提供了所有必需的信息。如果我错过了请指出。谢谢!! struts2 dojo 标签已经被弃用了一段时间,通常应该避免使用。如果你想使用 ajax,这个问题涵盖了所有的基础:***.com/questions/7005056/… 我建议的答案很好,因为它很好地划分了关注点。 struts2 社区可以很容易地解决 stuts2-json 问题。 jquery 社区可以非常轻松地回答 jQuery-json 问题,最终您将更快地获得解决方案。 感谢您的回复。我读了你提到的另一个线程。我试图避免使用更多的框架,因为我对 struts 还很陌生,并且正在使用 hibernate、dojo、tile 等,而且它变得非常丑陋和混乱。在尝试实现 JSON 时,我可能会迷路。此外,我已经使用 struts 配置进行了正常的动作调用,因此我可能无法正确获取 JSON。我会在下一个项目中尝试一下。 到那时,如果 dojo 已被弃用,那么如何使用我提到的第二种方法调用我的动作类。或者就此而言,我可以使用在 struts-config 中使用我现有的动作类和动作映射的任何方式/方法。请指教。谢谢!! 【参考方案1】:

最好的方法是从 struts2 官方网站下载 struts2-showcase 应用程序并将其解压到您的 tomcat 中。 他们有很多例子展示了 struts2 域中的各种事情是如何工作的,其中包括你的案例,比如两个相互连接的组合框/下拉列表

您正在查看的内容可以在展示应用程序的 ajax 选项卡下找到

这里是下载示例应用程序的链接

Showcase application

【讨论】:

感谢您的回复 umesh!我将查看示例并在出现任何问题时返回。谢谢!!

以上是关于尝试使用 struts 中的 ajax 更新 jsp 页面上的内容时出现问题(触发 onChange 事件时)的主要内容,如果未能解决你的问题,请参考以下文章

JSP+Struts:处理 AJAX 调用中的会话超时

Struts2.5 利用Ajax将json数据传值到JSP

struts中实现ajax的配置信息

(二十三)Struts2 Ajax标签

获取 ajax 请求以更新 SQL 表中的列

如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组