我们正在为所有受管理的豆类加入一个基础豆。 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}"/>
答案 0 :(得分:4)
它应该工作得很好。显然你是在错误的实例中访问它,或者你期望这些更改会在其他实例中神奇地反映出来。
使基础bean成为abstract class
并确保不将其注册为<managed-bean>
,而只是将其注册为实现类本身(当你仍然这样做时,那么JSF在尝试时会出错)实例化abstract class
)。您还应该在视图侧仅参考EL的实现类。即不要使用#{baseBean.value}
,而只使用#{concreteBean.value}
,否则将在基本bean实例中而不是在具体的bean实例中设置该值。当您使用#{concreteBean.submit}
作为操作方法时,该值仍为null
。
更新:根据您的更新,虽然代码无法编译,但看起来还不错。问题是由其他原因造成的。也许bean是请求范围的,你在导航案例中有一个<redirect/>
导致bean被新的请求包含并重新创建?