2012-03-29 109 views
1

我創建了因輸入可以將它發送到多個具有不同的支持bean中的每個頁面各種各樣的微控制器。我這樣做是因爲一個頁面,它接受一個案件編號,驗證病例數,然後將其傳送到任意數量的這就需要一個有效的情況下,頁數。JSF傳遞一個bean到頁面

這是我caseSelector頁:

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

我的豆正確驗證casenumber並填寫下一頁面豆,並將其轉發到該頁面。

//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; 
} 

問題是當我嘗試從下一頁訪問bean時,它是空的。我可以通過構造函數看到它創建了一個新的而不是在會話中使用的。我如何讓頁面使用我爲它創建的bean?

謝謝!

+0

什麼是你的bean的範圍。它應該是SessionScoped。 – 2012-03-29 17:59:14

+0

我確實有這個要求。當我將其更改爲會話,我 javax.servlet.ServletException:無法創建託管bean caseSelectorBean。發現以下問題: - 表達式#{param.caseNumber}引用的對象的請求範圍比會話 的引用託管bean(caseSelectorBean)範圍短,因爲我有一個託管屬性, \t <託管財產> <屬性名稱> caseNumber #{} param.caseNumber 2012-03-29 18:39:59

+0

有沒有更好的方式來傳遞從JSP頁面的caseNumber參數? – 2012-03-29 18:43:41

回答

0

#{param}的ManagedProperty僅適用於請求範圍豆。使用f:viewParam更廣泛的範圍:

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

然後你只需要在你的bean getter和setter一個簡單的屬性caseNumber。

相關問題