一尘不染

如何调用Struts Action类并使用jQuery在屏幕上显示数据

jsp

我在JSP中以表格格式显示数据列表。每个列中的一列将具有3个不同的链接。Action类中有3个不同的方法,因此单击链接将触发相应的方法。方法从Action类返回数据后,将根据Action类返回的列表大小追加行数。我正在使用struts迭代器进行迭代并添加<tr>。我已经编写了执行该操作的jQuery,并且一切正常。

新要求是,当我单击第一个链接时,它应显示记录集。当我再次单击第一个链接时,应删除显示的记录集。这种切换记录集的方式。

为此,我创建了一个div组件,在其中添加了新的记录集并尝试执行该操作,但是它无法按预期工作。随附了每个文件的源代码摘录。请让我知道你的想法。

JSP文件:

<s:iterator value="#mbean.myList" var="poItem">
    <tr>
        <td class="matlNumber">&nbsp;</td>
        <td><s:property value="#poItem.doc" /></td>
        <td>&nbsp;</td>
        <td>&nbsp;</td>
        <td><s:property value="#poItem.weekOne" />  </td>
        <td><s:property value="#poItem.weekFive" /></td>
    </tr>
</s:iterator>

JS文件:

$(".poLink").click(function(){      
    var myData = $(this).closest('tr').find('td:first').text();
    document.forms[0].action = "poListMaterialPlanning.action?myData ="+myData ;
    document.forms[0].submit();
}

我尝试使用$.ajax(),但无法将Action类返回的数据分配给JSP中的struts变量。


阅读 246

收藏
2020-06-08

共1个答案

一尘不染

前提:句子

无法将Action类返回的数据分配给JSP中的struts变量。

这是错误的,因为在呈现的HTML页面中没有类似“
Struts变量”的东西

也就是说,有几种方法可以实现您的目标(尽管尚不完全清楚):

  1. 呈现页面时加载内容 ,然后通过javascript隐藏/显示它 ; 这是最快的方法,但是在某些情况下不建议这样做,例如:

    • 页面加载后,内容可能已更改,因为其他用户或软件正在对其进行更新;
    • 它太大了,无法为所有记录加载它,并且内存占用量和页面加载时间变得无法接受。
    • 通过标准POST / GET提交添加/删除内容 ; 这是旧的方式,您需要重新加载所有内容,重新加载所有内容,并且必须手动处理锚点和与页面相关的操作。
  2. 通过AJAX调用添加内容 ,并通过javascript(原始javascript,jQuery,struts2-jQuery-plugin或其他库)将其删除;如果解决方案n.1不适合您的情况,则可能正是您所需要的。

为了遵守简化工作的最新标准/最佳做法/工具,您应该使用:

  • Struts2-jquery-plugin代替原始jQuery来执行AJAX调用。看看在橱窗上,都AjaxWidgets零件。您可能正在寻找Ajax-> Div-> Div - Reload示例。然后
  • 在目标div中返回JSP代码段,或者
  • 一个JSON对象,您将通过javascript手动解析该JSON对象以构建输出(减少网络流量,但需要更多工作),或提供给struts2-jquery标签。顺便说一句,对于JSON,最好[使用struts2-json-plugin,这将对您 _有很大_帮助。

旁注:如果注入包含其他struts2-jquery标签的JSP代码段

2020-06-08