Forms 如何通过表单中的索引访问会话ArrayList?

Forms 如何通过表单中的索引访问会话ArrayList?,forms,session,struts2,arraylist,Forms,Session,Struts2,Arraylist,我有一个类型为ArrayList的会话变量。 在jsp页面中,我需要通过索引访问它来动态创建表单,但在提交表单后,我发现会话ArrayList的元素值没有改变 下面是我在JSP页面上尝试的内容(我使用struts2框架): 另一个数组和#会话。chosenActionsArray的大小相同 我猜我迭代它是错误的,但在我的例子中,按索引迭代它是一种义务。 提前非常感谢:)您需要通过操作访问会话,会话可以从jsp访问,但不能通过这种方式直接从外部世界访问 让您提交表单的操作实现SessionAw

我有一个类型为ArrayList的会话变量。 在jsp页面中,我需要通过索引访问它来动态创建表单,但在提交表单后,我发现会话ArrayList的元素值没有改变

下面是我在JSP页面上尝试的内容(我使用struts2框架):


另一个数组#会话。chosenActionsArray的大小相同

我猜我迭代它是错误的,但在我的例子中,按索引迭代它是一种义务。
提前非常感谢:)

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

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

编辑

假设您的操作中有一个名为“矩阵”的字符串数组列表。。。您可以通过以下方式迭代属性:

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

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


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

我不认为迭代是你的问题,当然没有生成的html谁可以说。。。如果没有你正在提交的行动,你很难创建一个具体的解决方案。嗨!谢谢你的回答。嗯,我的行动很好,问题不在其中。我的问题是,我不知道如何在表单中设置“ArrayList of a ArrayList”(矩阵)的值。谢谢。我明白你的意思,我同意你的看法。但问题是,在我的action类中,我有一个数组,它在调用一个action后获取值,但它的生命很短,当我调用第二个action时,它显示它的大小为0。。。这就是我想到会话变量的原因。另外,如果我可以在jsp页面中为我的arraylist设置一个大小,这也是一个解决方案,但我也不知道如何做。。。谢谢。请提供代码,具体的工作要比抽象的容易得多。您可能会发现,在为我们创建合适的演示时,问题得到了解决,如果这里没有人会解决问题。
<s:iterator value="matrix">
  <s:iterator>
    <s:property/>
  </s:iterator>
</s:iterator>