poll不适用于setted var

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poll不适用于setted var相关的知识,希望对你有一定的参考价值。

我想使用一个包含两个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
        }
    }
} 

此解决方案使用value属性和form in not 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:民意调查中(我有几个),所以这不是方法代码的问题。问题是'form'为null,尽管在开始时变量'form'被初始化并且treeTable显示在页面上。所以当调用监听器时,'form'开始为null。

谢谢!

答案

我有一个解决方案!

问题在于:<c:set var="bean" value="#{webModule1}" scope="request" />

scope="request"还不够,根据我的理解,这个范围意味着当调用poll时,会创建一个新的bean引用,并且form变量为null,因为它不是firstInit()

scope="view"是解决方案。

谢谢你的评论!

以上是关于poll不适用于setted var的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 不适用于传输:['xhr-polling']

主题不适用于片段

Facebook状态回调不适用于片段

var 不适用于 DataGridViewRow

Android列表视图不适用于片段

上下文菜单不适用于两个片段