【问题标题】:poll doesn't work with setted varpoll 不适用于设置的 var
【发布时间】:2017-12-18 13:44:52
【问题描述】:

我想使用一个带有两个 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' 开始为空。

谢谢!

【问题讨论】:

  • 你能分享bean.process()这个代码吗?这种方法可能会抛出NullPointerException
  • @ArvindKatte 我更新了帖子。感谢您的评论。
  • 如果可能发布异常消息,无法确定确切的根本原因
  • @ArvindKatte NullPointerException 来自 this.form.isActive(),因为 form 变量为空。
  • 将调试点放在init 方法中检查init 方法中this.form 的值,然后我们将研究它

标签: jsf primefaces jstl ajax-polling


【解决方案1】:

我有办法!

问题在于: &lt;c:set var="bean" value="#{webModule1}" scope="request" /&gt;

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

scope="view" 是解决方案。

感谢cmets!

【讨论】:

    猜你喜欢
    • 2015-06-21
    • 2018-05-30
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多