我有一个类型为ArrayList的会话变量。 在jsp页面中,我需要通过索引来访问它以动态创建表单,但在我提交表单后,我发现会话ArrayList的元素值没有改变。
这是我在JSP页面上尝试过的(我使用struts2 Framework):
<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 具有相同的尺寸。
我想我错误地迭代它,但在我的情况下,通过索引迭代它是一种义务。 非常感谢你提前:))
答案 0 :(得分:1)
您需要通过操作访问会话,会话可以通过jsp访问,但不能直接从外部访问。
让您提交表单的操作实施SessionAware。我将为ArrayList创建一个getter / setter以及正确的验证,然后通过execute方法将这些值移入会话。我不喜欢直接将你的会话暴露给外面的世界(在你的行动中为会话提供一个setter)...如果你这样做,你需要知道你可能已经让恶意用户访问了你的内容可能没想到。
修改
假设您的动作中有一个名为“matrix”的StringList的ArrayList,您可以通过以下方式迭代属性:
<s:iterator value="matrix">
<s:iterator>
<s:property/>
</s:iterator>
</s:iterator>
外部迭代器迭代“matrix”,将每个实例推送到值堆栈的顶部。内部迭代器将使用默认情况下堆栈顶部的内容与属性标记相同。将tr和td元素放置在正确的位置,您可以渲染表格。
要为输入元素(可能是隐藏的元素)生成正确的名称属性,您可能需要格式为矩阵[i] [j],其中i和j是整数,并定义适当的矩阵。正如您所做的那样使用迭代器的status属性将是生成索引的好方法。