JSF 1.2托管bean继承不起作用

时间:2011-05-26 17:02:04

标签: jsf inheritance

我们正在为所有受管理的豆类加入一个基础豆。 basebean中定义了一些常用属性。 但是我们无法检索Base bean中设置的值。可能是什么问题?

这是我定义的方式。

BaseBean { 
    String msg; 
    // getter and setter
}

TestManagedBean extends BaseBean {         
    public String doAction() {
        setMsg("testMsg");     
        return "status" 
    } 
}

在jsp中:

<h:outputText value="#{testManagedBean.msg}"/>   

1 个答案:

答案 0 :(得分:4)

它应该工作得很好。显然你是在错误的实例中访问它,或者你期望这些更改会在其他实例中神奇地反映出来。

使基础bean成为abstract class并确保不将其注册为<managed-bean>,而只是将其注册为实现类本身(当你仍然这样做时,那么JSF在尝试时会出错)实例化abstract class)。您还应该在视图侧仅参考EL的实现类。即不要使用#{baseBean.value},而只使用#{concreteBean.value},否则将在基本bean实例中而不是在具体的bean实例中设置该值。当您使用#{concreteBean.submit}作为操作方法时,该值仍为null


更新:根据您的更新,虽然代码无法编译,但看起来还不错。问题是由其他原因造成的。也许bean是请求范围的,你在导航案例中有一个<redirect/>导致bean被新的请求包含并重新创建?