在JSF 1.2应用程序中,我可以覆盖使用子类返回的会话范围的Managed Bean吗?
班级结构
我有一个会话范围的托管Bean MainViewMB
及其子类RestrictedViewMB
:
面-config.xml中
<managed-bean>
<managed-bean-name>mainViewMB</managed-bean-name>
<managed-bean-class>com.example.MainViewMB</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
问题陈述
EL表达式#{mainViewMB}
返回MainViewMB
的实例。
我想使用#{mainViewMB}
的实例重新绑定名称RestrictedViewMB
,以便EL表达式#{mainViewMB}
返回会话其余部分的子类实例。
有没有办法实现我的目标?
激励示例
MainViewMB
处理应用程序主页后面的GUI逻辑。当用户从专用登录页面进入应用程序时,我需要提供主页的受限简化视图。覆盖子类中的一些MainViewMB
属性似乎是一个明显的解决方案。
答案 0 :(得分:2)
在您需要/需要的时候手动执行。
externalContext.getSessionMap().put("mainViewMB", new RestrictedViewMB());
这会将RestrictedViewMB
的新实例放在会话范围中,名称为mainViewMB
,从而有效地使其成为会话范围的托管bean。
您只需要考虑托管属性,@PostConstruct
/ @PreDestroy
不会以这种方式调用,您也必须手动执行。