首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作用域和@PostConstruct

作用域和@PostConstruct
EN

Stack Overflow用户
提问于 2013-08-24 11:38:52
回答 1查看 1K关注 0票数 1

我使用的是JSF 2、PrimeFacces 3.4和CDI。我有两页:page1.xhtmlpage2.xhtml。每个页面都有自己的托管bean:Page1BeanPage2Bean

page1.xhtml有一个<p:remoteCommand>,其actionListener显示page2.xhtml

page2.xhtml包含<ui:include>下的3个组件和一个提交按钮。这三个组件中的每一个都绑定到不同的托管beans - Component1BeanComponent2BeanComponent3Bean。submit按钮显示page1.xhtml

这三个ComponentXBean有一个带有一些初始化代码的@PostConstruct方法。我尝试了以下对这些bean的作用域:

  • @SessionScoped:对于单个提交操作,一切都很好。当我重复时,这些bean就不会被@PostConstruct重新初始化,因为这些bean是会话范围的。
  • @ViewScoped@PostConstruct被多次调用。
  • @ConversationScoped:与@ViewScoped相同的行为。

为什么在视图和会话范围内多次调用@PostConstruct?我如何才能让他们只被调用一次每次提交操作?

EN

回答 1

Stack Overflow用户

发布于 2013-08-24 11:58:40

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

preRender与初始化分开。您可以分别将它们挂起,也可以有一个标志只调用初始化()一次。

如果可能的话,避免使用会话范围的bean;会话范围是设计糟糕的web应用程序的标志,而且(在最简单的形式中)是实现页间流的非常糟糕的方式。在网页之间传递URL或POST参数以实现流。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18418156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档