用子类覆盖会话范围的Managed Bean

时间:2013-11-26 17:35:19

标签: jsf el jsf-1.2 managed-bean subclassing

在JSF 1.2应用程序中,我可以覆盖使用子类返回的会话范围的Managed Bean吗?

班级结构

我有一个会话范围的托管Bean MainViewMB及其子类RestrictedViewMB

UML: <<ManagedBean>> MainViewMB extended by 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属性似乎是一个明显的解决方案。

1 个答案:

答案 0 :(得分:2)

在您需要/需要的时候手动执行。

externalContext.getSessionMap().put("mainViewMB", new RestrictedViewMB());

这会将RestrictedViewMB的新实例放在会话范围中,名称为mainViewMB,从而有效地使其成为会话范围的托管bean。

您只需要考虑托管属性,@PostConstruct / @PreDestroy不会以这种方式调用,您也必须手动执行。