【问题标题】:Suggest the appropriate method of managing beans in Richfaces建议在 Richfaces 中管理 bean 的适当方法
【发布时间】:2011-07-09 16:17:58
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: jsf scope richfaces managed-bean


    【解决方案1】:

    如果您使用的是 Richfaces 3.0.0 或更高版本,您可以使用 @KeepAlive 注释您的 bean 或改用标签<a4j:keepAlive beanName="#{bean}" />。 这相当于 JSF 2.0 中的视图范围。

    【讨论】:

      【解决方案2】:

      如果您已经使用 JSF 2.0,请使用视图范围。只要您与同一页面交互(独立于浏览器选项卡/会话!),它就一直存在。

      如果您仍在使用 JSF 1.x,请使用在视图中声明 <a4j:keepAlive beanName="#{bean}" /> 的请求范围。它的行为类似于 JSF 2.0 视图范围。

      【讨论】:

      • 在视图范围内,如果我在 tabpanel 中更改选项卡,bean 是否会维护?正如我提到的,每个选项卡都是一个托管 bean。那么当我更改选项卡时会发生什么,因为当我更改选项卡时视图会更改? TabPanel 开关类型为客户端。
      • 在视图范围内引用那些 bean。
      • 谢谢,但我不是这个意思。如果我给出一个托管 bean 视图范围,则每个选项卡都引用一个 bean。当我更改选项卡面板中的选项卡时,是否保留了参数或 标记下所有内容的范围?
      • 我不是这个意思。对所有选项卡使用同一个 bean。您可以使每个选项卡 bean 成为同一个 bean 的属性。
      • 谢谢。 Rep++ :) 最后一件事,a4j:keepalive 的工作原理是否与 Icefaces 的扩展请求范围相同?
      猜你喜欢
      • 2023-01-17
      • 2015-06-23
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2023-03-07
      • 2015-11-01
      相关资源
      最近更新 更多