民意调查不适用于已设置的变量
我想使用一个带有两个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:民意调查(我有几个),所以这是不是方法代码的问题。 问题在于'form'为null,尽管在开始时变量'form'被初始化并且treeTable显示在页面上。所以当调用监听器时,'form'开始变为null。
谢谢!
回答:
我有一个解决方案!
的问题是有: <c:set var="bean" value="#{webModule1}" scope="request" />
scope="request"
是不够的,在我的理解这个范围意味着调查被调用时,一个新的bean参考创建并form
变量为null,因为它不是一个firstInit()
。
scope="view"
是解决方案。
谢谢您的意见!
以上是 民意调查不适用于已设置的变量 的全部内容, 来源链接: utcz.com/qa/263820.html