2012-03-29 5 views
1

入力に応じて、それぞれ異なるバッキングBeanを持つ多数のページに送ることができるソートの小さなコントローラを作成しました。これは、ケース番号を取る1ページがそのケース番号を確認して、それを有効なケース番号を必要とする任意の数のページに渡すため、私はこれを行います。ここで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> 

私のBeanが正しく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にアクセスしようとすると、空です。私はコンストラクタを介して見ることができます、それはセッションで1つを使用するのではなく、新しいものを作成しました。どのように私はそれのために作成した豆を使用してページを作るだろうか?

ありがとうございます!

+0

Beanの有効範囲は何ですか?それはSessionScopedでなければなりません。 –

+0

私はそれを要求しました。セッションに変更すると、 が発生します。javax.servlet.ServletException:マネージドBeanのcaseSelectorBeanを作成できません。 - 式#{param.caseNumber}によって要求されるオブジェクトのスコープが、参照されるマネージドBean(caseSelectorBean)のスコープの範囲より短くなっています 管理プロパティがあるため \t <マネージド・プロパティ> <プロパティ名> caseNumber #{} param.caseNumber

+0

は、JSPページからcaseNumberパラメータを渡すための良い方法はありますか? –

答えて

0

#{param}のManagedPropertyは、要求スコープBeanに対してのみ機能します。広いスコープ用f:viewParamを使用します。

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

次に、あなたがあなたのBean内のgetterとsetterを持つだけの単純なプロパティcaseNumberが必要です。

関連する問題