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つを使用するのではなく、新しいものを作成しました。どのように私はそれのために作成した豆を使用してページを作るだろうか?
ありがとうございます!
Beanの有効範囲は何ですか?それはSessionScopedでなければなりません。 –
私はそれを要求しました。セッションに変更すると、 が発生します。javax.servlet.ServletException:マネージドBeanのcaseSelectorBeanを作成できません。 - 式#{param.caseNumber}によって要求されるオブジェクトのスコープが、参照されるマネージドBean(caseSelectorBean)のスコープの範囲より短くなっています 管理プロパティがあるため \t <マネージド・プロパティ> <プロパティ名> caseNumberプロパティ名>#{} param.caseNumber マネージド・プロパティ> –
は、JSPページからcaseNumberパラメータを渡すための良い方法はありますか? –