我想使用一个带有两个托管的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
}
}
}
该解决方案可与值属性合作,并在非null中形式,例如:
<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:民意调查(我有几个),因此这不是方法代码的问题。问题是"形式"是无效的,尽管在开始变量"形式"初始化,并且在页面上显示可导航。因此,当侦听器被调用时,"表单"开始为null。
谢谢!
我有解决方案!
问题是: <c:set var="bean" value="#{webModule1}" scope="request" />
scope="request"
还不够,在我理解此范围时,这意味着在调用民意调查时,创建了一个新的bean参考,并且form
变量为null,因为它不是firstInit()
。
scope="view"
是解决方案。
谢谢您的评论!