2013-09-25 53 views
0

我想用多个SessionScoped Backing Beans创建一个JSF-2 Portlet。我还希望他们都能用一个共同的SessionScoped Bean来共享一些POJO,这些Bean将用作对象池。用JSF-2设置ObjectPool Bean

我有两个问题困扰着我:

  1. 我想有这个bean之前任何辅助bean的初始化。请注意,没有xhtml页面将直接调用对象池Bean,所以至少有一个Backing Bean将在ObjectPool之前初始化。有没有办法确保它将首先被初始化,除了在PostConstruct中调用其他每个Backing Bean?
  2. 我对使用ManagedProperties感到困惑,因为我需要所有Backing Bean来调用Object Pool的属性,而我也需要Backing Bean来调用某些Client/BackingBean函数。我怎么做,而不创建双引用?

回答

1
  • 关于第一个问题,你可以use在 登录XHTML页面一个f:prerenderView@SessionScoped豆直到你从 引用他们从页面或自己创建并存储在 的上下文中才创建。如果您将f:prerenderView链接到您的一些方法 ,它会像池一样运行,它将被初始化为 其余的HttpSession。您可以稍后使用@ManagedProperty注释将其注入其他 @SessionScoped豆。

  • 关于你的第二个问题,只要记住你不是被迫通过视图bean去获取会话属性的 。还没有 你让对象池本身是@ManagedBean?因此直接从您的页面访问它 !

+0

感谢您对prerenderedView提示。关于第二个问题,是的,ObjectPool也是一个SessionScoped ManagedBean,但正如我所说的,我宁愿不从xhtml页面指出它。但是,如果这是唯一的出路,我可能会这样做 – yannicuLar

+0

只有当视图bean执行一些逻辑代码来修改想要显示的内容时,通过视图范围bean来访问ObjectPool才有意义。其他方面,直接从页面访问该值是完全合法的,而不需要每个视图bean中的桥接。 –