我可以在不使用会话的情况下跨Struts2中的操作保留对象吗?
我正在开发一个Struts2项目,并且好奇是否有一些方法可以保留对象 行动结束后的价值。
我想做的是:
通常,一旦动作结束,列表就会丢失。因此,我必须将列表存储为会话,但我认为它应该有一些更好的方法来实现我的工作。
答案 0 :(得分:2)
如果要在请求之间保留数据,则会话是执行此操作的常规机制。
如果您不使用会话,则需要基本上复制其功能以维护与当前用户/会话相关联的数据。
答案 1 :(得分:1)
如果您需要保留列表,那么 可以使用会话。
但如果你(如果我理解你的问题)只需要通过
来处理ListActionOne(创建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有id
和value
个字段(带有getter和setter),
<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>
您最终将通过访问者验证器验证这样的列表(在完成所有其他操作后将来的某些内容:)
享受