Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 作用域和@PostConstruct_Jsf_Postconstruct - Fatal编程技术网

Jsf 作用域和@PostConstruct

Jsf 作用域和@PostConstruct,jsf,postconstruct,Jsf,Postconstruct,我正在使用JSF2、PrimeFacces 3.4和CDI。我有两个页面:page1.xhtml和page2.xhtml。每个页面都有自己的托管bean:Page1Bean和Page2Bean page1.xhtml有一个操作侦听器,其actionListener显示page2.xhtml page2.xhtml下包含3个组件和一个提交按钮。这三个组件中的每一个都绑定到不同的托管bean组件1bean、组件2bean和组件3bean。提交按钮显示page1.xhtml 这三个组件Xbeans有一

我正在使用JSF2、PrimeFacces 3.4和CDI。我有两个页面:page1.xhtml和page2.xhtml。每个页面都有自己的托管bean:Page1Bean和Page2Bean

page1.xhtml有一个操作侦听器,其actionListener显示page2.xhtml

page2.xhtml下包含3个组件和一个提交按钮。这三个组件中的每一个都绑定到不同的托管bean组件1bean、组件2bean和组件3bean。提交按钮显示page1.xhtml

这三个组件Xbeans有一个@PostConstruct方法和一些初始化代码。我在这些bean上尝试了以下范围:

@SessionScoped:对于单个提交操作,一切正常。当我重复它时,这些bean不会被@PostConstruct重新初始化,因为它们是会话作用域。 @ViewScope:@PostConstruct被调用多次。 @ConversationScoped:与@ViewScoped的行为相同。
为什么在视图和对话范围内多次调用@PostConstruct?如何让它们在每次提交操作中只被调用一次?

每次都在“preRender”下运行初始化代码可能是不正确的。因为初始化将清除所需的数据

将预渲染与初始化分开。您可以单独钩住它们,或者使用一个只调用initialize一次的标志

尽可能避免会话范围的bean;会话作用域是设计糟糕的web应用程序的标志,在最简单的形式中,它是实现页面间流的一种非常糟糕的方式。在网页之间传递URL或POST参数以实现流


如有必要,页间参数可以是HttpSession中存储的对象的唯一句柄。但是,不要只是将内容转储到会话中,而不让它对应用程序(如loggedInUser)真正是全局的,或者由唯一分配的句柄引用。

在我清理了公式并改进了问题的格式之后,我开始相信您正在使用binding属性将这些组件与bean绑定。这是真的吗?您使用的Mojarra版本早于2.1.18?这就完全解释了视图范围问题的原因。