2017-12-18 40 views
0

2 개의 ManagedBeans와 함께 하나의 HTML 페이지를 사용하고 싶습니다. URL의 매개 변수에 따라 JSTL 변수를 통해 bean 이름을 설정하려고합니다. 예를 들면 :설문 조사가 설정된 var에서 작동하지 않습니다.

<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"> 

:하지만 예를 들어, null가 아닌 청취자가 호출 될 때

<p:poll listener="#{bean.process()}" widgetVar="documentOutcome" autoStart="#{bean.form.start}" update="modulesTree" async="false" 
      interval="1" id="myPoll2" /> 

, NullPointerException가 나타납니다. 그리고이 문제는 모든 p : poll (일부 있음)에서 발생하므로 메서드 코드에 문제가 없습니다. 초기 변수 'form'이 초기화되고 treeTable이 페이지에 표시되지만 'form'이 null이라는 문제가 있습니다. 따라서 리스너가 호출되면 'form'이 null로 시작됩니다.

감사합니다.

+1

당신은이 코드를'bean.process()'와 공유 할 수 있습니까? 이 메소드가'NullPointerException'을 던질 수도 있습니다. –

+0

@ArvindKatte 게시물을 업데이트했습니다. 의견을 주셔서 감사합니다. – eveillaur

+0

가능하면 예외 메시지를 게시하여 정확한 근본 원인을 확인할 수 없습니다. –

답변

0

나는 해결책이 있습니다! <c:set var="bean" value="#{webModule1}" scope="request" />

scope="request"이 충분하지 않았다 나의 이해,이 범위는 설문 조사를 호출 할 때, 새로운 빈 참조가 생성 된 것을 의미하고 그것은 firstInit()하지 않았기 때문에 form 변수가 null이었다로

문제였다.

scope="view"이 해결책입니다.

감사합니다.

+0

좋은..!!! 행복한 학습 .. !! –