我在JSP中显示一个列表,如下所示: %@page contentType="text/html;charset=UTF-8"language="java"pageEncoding="UTF-8"%%@taglib prefix="s"uri="/struts-tags"%!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.
<%@page contentType="text/html;charset=UTF-8"language="java"pageEncoding="UTF-8"%> <%@taglib prefix="s"uri="/struts-tags"%> <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>xxx</title> <link rel="stylesheet" href="style.css"/> </head> <body> <s:form name="tableForm"method="post"> <th> <s:submit action="verify" key="Add"></s:submit> </th> <s:hidden name="propagateList" value="%{formList}"/> <table border="1"> <tr> <th >ID</th> <th>Name</th> <th>Status</th> <th>Type</th> <th>System</th> </tr> <s:iterator value="formList"> <tr> <td><s:checkbox name="checked" fieldValue="%{#attr.ID}" theme="simple" ></s:checkbox> </td> <td><s:property value="NAME"/></td> <td><s:property value="STATUS"/></td> <td><s:property value="TYPE"/></td> <td><s:property value="UNIT"/></td> </tr> </s:iterator> </table> </s:form> </body> </html>
这里我想在单击Add按钮时将listList列表传递给另一个动作,而不必再次访问数据库以获取列表formList.
我尝试使用< s:hidden name =“propagateList”value =“%{formList}”/>但它不起作用.
此列表包含超过1000条记录,那么有没有办法将此列表从jsp传递到Struts 2中的另一个操作而不使用会话?
要回答“如何在不使用Session的情况下将List从ActionA传递到ActionB”的问题:>如果是List< String> :
<s:iterator value="formList" status="row"> <s:hidden name="formList[%{#row.index}]" /> </s:iterator>
这将迭代整个List,并生成一个< s:hidden />列表中每个元素的元素;这样,您可以将未更改的List从一个Action传递到另一个Action.
>如果是List< Object> ,对象是您在页面中发布的对象:
<s:iterator value="formList" status="row"> <s:hidden name="formList[%{#row.index}].id" /> <s:hidden name="formList[%{#row.index}].name" /> <s:hidden name="formList[%{#row.index}].status" /> <s:hidden name="formList[%{#row.index}].type" /> <s:hidden name="formList[%{#row.index}].unit" /> </s:iterator>
与以前完全一样,这将迭代整个List,为List的每个对象生成五个元素.
使用此概念,您可以使用交互式标记(文本字段,选择等)而不是只读标记(隐藏,属性等)来更改列表:
<s:iterator value="formList" status="row"> <s:hidden name="formList[%{#row.index}].id" /> <s:textfield name="formList[%{#row.index}].name" value="name" /> <s:hidden name="formList[%{#row.index}].status" /> <s:property value="status" /> <s:textfield name="formList[%{#row.index}].type" value="type" /> <s:textfield name="formList[%{#row.index}].unit" value="unit" /> </s:iterator>
当然你的List会容易受到客户端的更改,每个能按F12的用户都可以修改你的List,那你应该小心.
例如,您可以在**会话中仅放入ID **,在JSP中注入List,然后在接收数据时,将来自页面的List的* ID *与* ID *匹配你在Session中有用于检查发布数据的完整性(没有新ID,没有双ID等)