场景是这样的。我有一个富有:tabPanel,大约有5个标签。在第一个选项卡上有一个rich:datatable。当我单击第一列的元素(a4j:commandLink)时,我得到另一个rich:datatable。当我单击此表的第一列的元素(a4j:commandLink)时,我更改了我有另一个rich:datatable的选项卡,并且如上所示。上一个选项卡中的约束用于获取当前选项卡的元素。如果我直接点击标签,我会获得与该标签相关的所有元素。每个rich:datatable引用不同的表。每个表都是相互关联的。每个选项卡引用一个托管bean。我在后端使用hibernate。
问题现在开始了。我不希望托管bean是基于会话或应用程序,因为有许多变量要存储。如果我给出请求范围,则会发生以下情况。选项卡中的第一个表完美呈现,但是当我单击第一列时,第二个表不使用所有约束,因为范围是请求,例如actionlistener。我该怎么办?
我能做的一件事是为每个表定义一个托管bean。或者强制使用会话范围。或者还有其他方法吗?请帮忙。
感谢。
答案 0 :(得分:2)
如果您使用的是Richfaces 3.0.0或更高版本,则可以使用@KeepAlive
注释您的bean
或者使用标记<a4j:keepAlive beanName="#{bean}" />
代替。
这相当于JSF 2.0中的视图范围。
答案 1 :(得分:1)
如果您已经使用JSF 2.0,请使用视图范围。只要您与同一页面进行交互(独立于浏览器选项卡/会话!),它就是一个范围。
如果您仍在JSF 1.x上,请使用请求范围,并在视图中声明<a4j:keepAlive beanName="#{bean}" />
。它的行为类似于JSF 2.0视图范围。