我有一个请求范围的 JSF 1.2 托管 bean,我需要将它重构为会话范围的 bean,因为它正在执行一些昂贵的操作,@PostConstruct
并且被多次调用,实际上只需要执行一次。将范围更改为会话的副作用是现在我不能FacesContext
再faces-config.xml
通过这样的方式注入:
<managed-property>
<property-name>context</property-name>
<value>#{facesContext}</value>
</managed-property>
我在哪里
setContext(FacesContext ctx) {}
在我的托管 bean 中。
在我的一种操作方法中,我需要上下文来访问ExternalContext
/ HttpServletResponse
。我不想调用
FacesContext.getCurrentInstance();
在我的操作方法中,但以某种方式在setContext(FacesContext ctx)
外部调用以允许隔离上下文注入,以便于模拟测试。我试着把里面的东西放在setContext()
里面,@PostConstruct
后来才意识到这FacesContext
是每个请求的事情,一旦提交了新的请求,我的ExternalContext
就被重置了。null
尽管托管 bean 本身是会话范围的,但我如何在setContext(FacesContext ctx)
每次遇到新请求时自动调用?