2012-03-29 5 views
1

입력에 따라 다른 백킹 빈을 가진 여러 페이지로 보낼 수있는 종류의 작은 컨트롤러를 만들었습니다. 사례 번호가있는 한 페이지에서 해당 사례 번호를 확인한 다음 유효한 사례 번호가 필요한 페이지 수만큼 전달하기 때문에이 작업을 수행합니다.JSF가 페이지에 빈을 전달합니다.

<h:form id="form1"> 
    <h:inputText value="#{caseSelectorBean.caseNumber}"/> 
    <h:inputHidden value="#{caseSelectorBean.nextPage}"/> 
    <h:commandButton action="#{caseSelectorBean.gotoNext}" value="submit"/> 
</h:form> 

내 콩이 제대로 casenumber를 확인하고 다음 페이지의 콩을 채우고 해당 페이지에 전달합니다 :

여기 내 caseSelector 페이지입니다.

//CaseSelectorBean 
public String gotoNext() { 
    logger.debug("In the caseChooser, going to xpage"); 
    logger.debug("caseNum=" + caseNumber); 

    if(!validateCaseNumber(caseNumber)) { 
     return "caseNotFound"; 
    } 

    if(nextPage.equals("page1")) { 
     CaseDAO caseDAO = new CaseDAO(); 
     caseInfo = caseDAO.getCaseInfo(caseNumber); 
     CaseInfoBean caseInfoBean = new CaseInfoBean(); 
     caseInfoBean.setCaseInfo(caseInfo); 
     caseInfoBean.setCaseNumber(caseNumber); 
     FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put(
        "caseInfoBean", caseInfoBean); 

    } 

    logger.debug("done with gotoNext(), returning " + nextPage); 
    return nextPage; 
} 

문제는 다음 페이지에서 빈에 액세스하려고하면 비어있는 것입니다. 생성자를 통해 세션에서 하나를 사용하는 대신 새로운 생성자를 만들었습니다. 내가 만든 빈을 페이지에서 어떻게 사용하게 할까?

감사합니다.

+0

빈의 범위는 무엇입니까? SessionScoped 여야합니다. –

+0

내가 요청 했어. 세션으로 변경할 때 javax.servlet.ServletException : 관리되는 bean caseSelectorBean을 만들 수 없습니다. - 표현식 # {param.caseNumber}에 의해 참조되는 개체의 범위 (요청)가 관리 대상 속성 ( \t)을 가지고 있으므로 참조 된 관리되는 bean (caseSelectorBean) 세션 범위 보다 짧습니다. 관리 재산권> <특성 이름> caseNumber # {param.caseNumber}

+0

JSP 페이지에서 caseNumber 매개 변수를 전달할 수있는 더 나은 방법이 있나요? –

답변

0

#{param}의 ManagedProperty는 요청 범위 Bean에서만 작동합니다. 넓은 범위에 대한 f:viewParam를 사용

<f:metadata> 
    <f:viewParam name="caseNumber" value="#{caseSelectorBean.caseNumber}"/> 
</f:metadata> 

그런 다음 당신이 당신의 빈에서 getter 및 setter 만 간단한 속성 caseNumber이 필요합니다.

관련 문제