建议在Richfaces中管理bean的适当方法

时间:2011-03-06 03:59:51

标签: jsf scope richfaces managed-bean

场景是这样的。我有一个富有:tabPanel,大约有5个标签。在第一个选项卡上有一个rich:datatable。当我单击第一列的元素(a4j:commandLink)时,我得到另一个rich:datatable。当我单击此表的第一列的元素(a4j:commandLink)时,我更改了我有另一个rich:datatable的选项卡,并且如上所示。上一个选项卡中的约束用于获取当前选项卡的元素。如果我直接点击标签,我会获得与该标签相关的所有元素。每个rich:datatable引用不同的表。每个表都是相互关联的。每个选项卡引用一个托管bean。我在后端使用hibernate。

问题现在开始了。我不希望托管bean是基于会话或应用程序,因为有许多变量要存储。如果我给出请求范围,则会发生以下情况。选项卡中的第一个表完美呈现,但是当我单击第一列时,第二个表不使用所有约束,因为范围是请求,例如actionlistener。我该怎么办?

我能做的一件事是为每个表定义一个托管bean。或者强制使用会话范围。或者还有其他方法吗?请帮忙。

感谢。

2 个答案:

答案 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视图范围。