2017-12-18 136 views
0

我想使用一个带有两个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。

谢谢!

+1

你可以分享'bean.process()'这个代码。可能这种方法抛出'NullPointerException' –

+0

@ArvindKatte我更新了帖子。感谢您的评论。 – eveillaur

+0

如果可能发布异常消息,无法确定确切的根本原因 –

回答

0

我有一个解决方案!

的问题是有: <c:set var="bean" value="#{webModule1}" scope="request" />

scope="request"是不够的,在我的理解这个范围意味着调查被调用时,一个新的bean参考创建并form变量为null,因为它不是一个firstInit()

scope="view"是解决方案。

谢谢您的意见!

+0

好..!!!快乐学习.. !! –