我有一个 ArrayList 类型的 session 变量。 在 jsp 页面中我需要通过索引访问它以动态创建一个表单,但是在我提交表单后我发现 session ArrayList 的元素值没有改变。
这是我在我的 JSP 页面上尝试过的(我使用 struts2 框架):
<s:iterator value="anotherArray" status="RowsIterator">
<tr>
<td>
<s:iterator value="actionOptionsArray" status="iter">
<s:radio
name="#session.chosenActionsArray[%{#RowsIterator.index}]" <!-- The concerned line -->
list="%{actionOptionsArray[#iter.index]}"
value="#{actionOptionsArray[0]}"
theme="simple" />
<br>
</s:iterator>
</td>
<!-- other fields-->
</tr>
</s:iterator>
anotherArray 和 #session.chosenActionsArray 具有相同的大小。
我想我错误地迭代了它,但在我的例子中,按索引迭代它是一项义务。 非常感谢您:)
最佳答案
您需要通过操作访问 session , session 可以从 jsp 访问,但不能通过这种方式直接从外部世界访问。
让您提交表单的操作实现 SessionAware。我会为 ArrayList 创建一个 getter/setter 以及适当的验证,然后通过 execute 方法将这些值移动到 session 中。我不喜欢将你的 session 直接暴露给外界(在你的操作中为 session 提供 setter )......如果你这样做你需要意识到你可能已经让恶意用户访问你的东西可能没有预料到。
编辑
假设您的操作中有一个名为“matrix”的 ArrayList of String 的 ArrayList...您可以通过以下方式迭代属性:
<s:iterator value="matrix">
<s:iterator>
<s:property/>
</s:iterator>
</s:iterator>
外部迭代器迭代“矩阵”,将每个实例推到值堆栈的顶部。默认情况下,内部迭代器将使用与属性标记相同的堆栈顶部的内容。将 tr 和 td 元素放在正确的位置,您就可以呈现表格。
要为输入元素(可能是隐藏元素)生成正确的名称属性,您需要以 matrix[i][j] 的形式使用它们,其中 i 和 j 是整数,并定义一个适当的矩阵。像您所做的那样使用迭代器的状态属性将是生成索引的好方法。
关于forms - 如何通过表单中的索引访问 session ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12231009/