Jsf 使用f:viewParam发出传递参数
我有一个JSF页面,显示从给定帐户的DB中提取的大量数据项。该页面有一个SelectOne菜单,其中列出了数据库中要选择的所有帐户,还有一个commandButton,用于触发使用新选择的帐户重新加载页面。我的问题是,当我单击commandButton时,页面将重新加载,但不使用新选择的帐户。正在执行方法pullData()中的“else” 我的JSF页面:Jsf 使用f:viewParam发出传递参数,jsf,jsf-2,primefaces,actionlistener,Jsf,Jsf 2,Primefaces,Actionlistener,我有一个JSF页面,显示从给定帐户的DB中提取的大量数据项。该页面有一个SelectOne菜单,其中列出了数据库中要选择的所有帐户,还有一个commandButton,用于触发使用新选择的帐户重新加载页面。我的问题是,当我单击commandButton时,页面将重新加载,但不使用新选择的帐户。正在执行方法pullData()中的“else” 我的JSF页面: <f:metadata> <f:viewParam name="account" value="#{accoun
<f:metadata>
<f:viewParam name="account" value="#{accountAnalysisBean.account}" />
<f:viewParam name="start" value="#{accountAnalysisBean.start}" />
<f:viewParam name="end" value="#{accountAnalysisBean.end}" />
<f:event type="preRenderView" listener="#{accountAnalysisBean.pullData}" />
</f:metadata>
<h:form>
<p:panelGrid columns="6">
<f:facet name="header">
<p:selectOneMenu id="pickAccount" value="#{accountAnalysisBean.pickAccount}" required="true">
<f:selectItems value="#{editAccountBean.allAccounts}" />
</p:selectOneMenu>
<p:calendar id="start" value="#{accountAnalysisBean.start}" />
<p:calendar id="end" value="#{accountAnalysisBean.end}" />
<p:commandButton value="Get Account" actionListener="#{accountAnalysisBean.updateAccount}" />
<f:param name="start" value="#{accountAnalysisBean.start}"/>
<f:param name="end" value="#{accountAnalysisBean.end}"/>
<f:param name="account" value="#{accountAnalysisBean.pickAccount}"/>
</p:commandButton>
</f:facet>
</p:panelGrid>
</h:form>
我使用的是JSF 2.2和PrimeFaces 4,让我们看看这里可能发生的事情:
将使用定义的setter在初始页面加载时设置
bean中的值AccountAnalysisBean
- 页面加载完成后,
就会被销毁:它是一个AccountAnalysisBean
bean@RequestScoped
- 因此,当您单击commandButton时,您将从一个全新的
副本开始,其中没有任何内容AccountAnalysisBean
考虑:
- 使
aAccountAnalysisBean
bean@ViewScoped
- 去掉
,改用actionListener
属性。根据这里的代码示例,您并不真正需要它action
@ManagedBean
@RequestScoped
public class AccountAnalysisBean {
private String account = "";
private String id = "";
private String pickAccount = "";
private Date start;
private Date end;
//----getters and setters----
public void pullData() {
if (account != "") {
//pull various fields from database given account value
} else {
//set default null values
}
}
public String updateAccount(ActionEvent actionEvent) {
fix = DAOFactory.getInstance("fix_site2.jdbc");
datalist = fix.getMyDataDAO();
account = datalist.findAccountID(pickAccount); //returns an ID from a DB given account selected from menu
return "/AccountAnalysis.xhtml?includeViewParams=true";
}
//remainder of code omitted for clarity
}