3

我有一个 ArrayList 类型的会话变量。在 jsp 页面中,我需要通过索引访问它以动态创建表单,但是在提交表单后,我发现会话 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具有相同的大小。

我想我错误地迭代它,但在我的情况下,按索引迭代它是一种义务。非常感谢你:)

4

1 回答 1

1

您需要通过操作访问会话,会话可以从 jsp 访问,但不能通过这种方式直接从外部世界访问。

让您提交表单的操作来实现 SessionAware。我将为 ArrayList 创建一个 getter/setter 以及适当的验证,然后通过 execute 方法将这些值移动到会话中。我不喜欢将您的会话直接暴露给外界(为您的操作中的会话提供设置器)......如果您这样做,您需要注意您可能已经让恶意用户访问您的东西可能没想到。

编辑

假设您的操作中有一个名为“matrix”的字符串的 ArrayList 的 ArrayList……您可以通过以下方式迭代属性:

<s:iterator value="matrix">
  <s:iterator>
    <s:property/>
  </s:iterator>
</s:iterator>

外部迭代器迭代“矩阵”,将每个实例推到值堆栈的顶部。默认情况下,内部迭代器将使用与属性标签相同的堆栈顶部的内容。将 tr's 和 td 元素放在正确的位置,您可以呈现表格。

要为输入元素(可能是隐藏元素)生成正确的名称属性,您可能希望它们采用矩阵 [i][j] 的形式,其中 i 和 j 是整数并定义适当的矩阵。正如您所做的那样使用迭代器的状态属性将是生成索引的好方法。

于 2012-09-01T20:57:58.090 回答