【发布时间】:2013-08-24 11:38:52
【问题描述】:
我正在使用 JSF 2、PrimeFacces 3.4 和 CDI。我有 2 页:page1.xhtml 和 page2.xhtml。每个页面都有自己的托管 bean:Page1Bean 和 Page2Bean。
page1.xhtml 有一个<p:remoteCommand>,其actionListener 显示page2.xhtml。
page2.xhtml 在<ui:include> 下包含 3 个组件和一个提交按钮。这 3 个组件中的每一个都绑定到不同的托管 bean Component1Bean、Component2Bean 和 Component3Bean。提交按钮显示page1.xhtml。
这三个ComponentXBeans 有一个带有一些初始化代码的@PostConstruct 方法。我在这些 bean 上尝试了以下范围:
-
@SessionScoped:单次提交操作一切正常。当我重复一遍时,@PostConstruct不会重新初始化这些 bean,因为它们是会话范围的。 -
@ViewScoped:@PostConstruct被多次调用。 -
@ConversationScoped:与@ViewScoped相同的行为。
为什么@PostConstruct 在视图和会话范围内被多次调用?如何让它们每次提交操作只调用一次?
【问题讨论】:
-
在我清理了公式并改进了问题的格式之后,我开始相信您正在使用
binding属性将这些组件与bean 绑定。这是真的?而且您使用的是早于 2.1.18 的 Mojarra 版本?那么这完全解释了视图范围问题的原因。
标签: jsf postconstruct