一尘不染

如何在不使用会话的情况下将列表从一个动作传递到Struts 2中的另一个动作?

jsp

我在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.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>

在这里,当我单击“ 添加”* 按钮时,我想将列表 formList 传递给另一个动作,而不必点击数据库来再次获取列表 formList
***

我尝试使用, <s:hidden name="propagateList" value="%{formList}"/>但不起作用。

该列表包含1000多个记录,因此有没有办法在不使用会话的情况下将该列表从jsp传递到Struts 2中的另一个动作?


阅读 236

收藏
2020-06-08

共1个答案

一尘不染

要回答“如何在不使用会话的情况下将列表从ActionA传递到ActionB”的问题,请执行以下操作:

  • 如果是List<String>
        <s:iterator value="formList" status="row">
        <s:hidden name="formList[%{#row.index}]" />
    </s:iterator>

这将遍历整个List,并<s:hidden/>为List的每个元素生成一个元素;这样,您可以将未更改的列表从一个操作传递到另一个。

  • 如果是List<Object>,则对象是您已在页面中发布的对象:

```







就像以前一样,这将遍历整个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>

```

当然,您的列表将很容易受到客户端更改的影响,每个能够按F12键的用户都将能够修改您的列表,那么您应该小心。

你可以,例如,只放了 ID ■在会议 ,注入JSP中的列表,接收数据,然后回时,匹配 ID * S的名单从网页来与 ID
*在会话中,用于检查发布的数据的完整性(无新ID,无双ID等)

2020-06-08