2017-12-18 16 views
0

2つのManagedBeansで1つの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 
     } 
    } 
} 

また、新しい1:

@ManagedBean(name = "webModule2") 
@ViewScoped 
public class WebModule2 extends WebModule1 { 
    public void process() { 
     if(this.form.isActive()){ 
      //code with some changes 
     } 
    } 
} 

このソリューションは、value属性とフォームで機能します例えば、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:polls(私はいくつかあります)にあります。したがって、これはメソッドコードには問題ありません。 最初の変数 'form'は初期化され、treeTableはページに表示されますが、 'form'はnullです。したがって、 'フォーム'は、リスナーが呼び出されるとnullになります。

ありがとうございます!

+1

このコードを 'bean.process()'で共有できますか?このメソッドが 'NullPointerException'を投げるかもしれない –

+0

@ArvindKatte投稿を更新しました。コメントありがとう。 – eveillaur

+0

可能であれば、例外メッセージを投稿して正確な根本原因を特定できない –

答えて

0

私には解決策があります!

問題はしていました: <c:set var="bean" value="#{webModule1}" scope="request" />

scope="request"は十分ではなかったし、私の理解では、この範囲には、投票が呼び出されたとき、それはfirstInit()なかったので、新しいBeanの参照が作成され、form変数がnullだったことを意味しました。

scope="view"が解決策です。

ありがとうございました!

+0

良い..!!!幸せな学習..! –

関連する問題