2017-12-18 135 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

好..!!!快樂學習.. !! –