我想使用一个带有两个 ManagedBeans 的 html 页面。根据 URL 中的参数,我想通过 JSTL 变量设置 bean 名称。例如:
<c:set var="bean" value="#{webModule1}" scope="request" />
或者
<c:set var="bean" value="#{webModule2}" scope="request" />
我有一直在使用的课程,所以可以肯定的是:
@ManagedBean(name = "webModule1")
@ViewScoped
public class WebModule1 implements Serializable {
protected WebModulesFormBean form;
@PostConstruct
public void init() {
if (!firstInit()){
this.form= new WebModulesFormBean();
}
//some code
}
public void process() {
if(this.form.isActive()){
//some code
}
}
}
还有一个新的:
@ManagedBean(name = "webModule2")
@ViewScoped
public class WebModule2 extends WebModule1 {
public void process() {
if(this.form.isActive()){
//code with some changes
}
}
}
此解决方案适用于非空值属性和表单,例如:
<p:treeTable value="#{bean.form.root}" var="node" id="modulesTree">
但我对这段代码有疑问:
<p:poll listener="#{bean.process()}" widgetVar="documentOutcome" autoStart="#{bean.form.start}" update="modulesTree" async="false"
interval="1" id="myPoll2" />
调用监听器时,会出现 NullPointerException。这个问题是所有 p:polls (我有几个),所以这不是方法代码的问题。问题是 'form' 为空,尽管在开始时变量 'form' 已初始化并且 treeTable 显示在页面上。因此,当调用侦听器时,'form' 开始为空。
谢谢!