我已经创建了一个小的控制器,根据输入可以将它发送到多个页面,每个页面都有不同的支持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>
my bean正确验证casenumber并填写下一页的bean并将其转发到该页面。
//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 :(得分:0)
带有#{param}
的ManagedProperty仅适用于请求范围的bean。将f:viewParam
用于更广泛的范围:
<f:metadata>
<f:viewParam name="caseNumber" value="#{caseSelectorBean.caseNumber}"/>
</f:metadata>
然后你只需要一个带有getter和setter的简单属性caseNumber。