通过Struts2中的操作保留对象

时间:2013-01-12 05:14:51

标签: struts2

我可以在不使用会话的情况下跨Struts2中的操作保留对象吗?

我正在开发一个Struts2项目,并且好奇是否有一些方法可以保留对象 行动结束后的价值。

我想做的是:

  1. 调用操作以从上载的文件中读取并将其内容准备为对象列表。
  2. 然后我将列表显示为用户的示例。
  3. 然后,用户可以单击提交按钮调用操作来处理从第一个操作创建的列表。
  4. 通常,一旦动作结束,列表就会丢失。因此,我必须将列表存储为会话,但我认为它应该有一些更好的方法来实现我的工作。

2 个答案:

答案 0 :(得分:2)

如果要在请求之间保留数据,则会话是执行此操作的常规机制。

如果您不使用会话,则需要基本上复制其功能以维护与当前用户/会话相关联的数据。

答案 1 :(得分:1)

如果您需要保留列表,那么 可以使用会话。

但如果你(如果我理解你的问题)只需要通过

来处理List
  

ActionOne(创建List) - >

     

JSPOne(thast向用户显示List) - >

     

ACtionTwo(从JSPOne接收List并与之合作)

,无需担心用户可以更改List客户端(例如使用FireBug操作网页)这一事实,那么您不需要会话。

您只需要在ActionOne和ActionTwo上声明List对象(使用getter和setter,至少是ActionOne上的getter,至少是ActionTwo上的setter),并在name上包含List名称和索引JSP标记的属性。 如果您只是绘制它(就像使用<s:property/>标记一样),使用一些会发布值的标记,例如<s:textfield />,那么只需使用<s:hidden />来发布te值。

例如,如果你有:

List<MyObject> myList //with getters and setters

并假设MyObject有idvalue个字段(带有getter和setter),

在JSP而不是

中的

<s:iterator value="myList" >
   <s:property value="id"/>
   <s:textfield name="value"/>
</s:iterator>

使用

<s:iterator value="myList" status="ctr" >
   <s:hidden name="myList[#ctr.index].id" value="id"/>
   <s:property value="id"/> <!-- no need here, you won't post this -->
   <s:textfield name="myList[#ctr.index].value" value="value" />
</s:iterator>

您最终将通过访问者验证器验证这样的列表(在完成所有其他操作后将来的某些内容:)

享受