使用f:viewParam发出传递参数

时间:2014-02-25 17:44:25

标签: jsf jsf-2 primefaces actionlistener

我有一个JSF页面,显示从给定帐户的数据库中提取的大量数据项。该页面有一个SelectOneMenu,列出了DB中可供选择的所有帐户,以及一个commandButton,用于触发使用新选择的帐户重新加载页面。我的问题是当我单击commandButton页面重新加载但没有采用新选择的帐户。方法pullData()中的“else”正在执行。

我的JSF页面:

<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>   

我的豆子:

@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  

}  

我正在使用JSF 2.2和PrimeFaces 4

1 个答案:

答案 0 :(得分:0)

让我们来看看这里可能发生的事情:

  • <f:viewParam/>将使用定义的setter

  • 在初始页面加载时设置AccountAnalysisBean bean中的值
  • 一旦页面加载完毕,AccountAnalysisBean就会被销毁:它是@RequestScoped bean。

  • 因此,当您点击commandButton时,您将从AccountAnalysisBean的新副本开始,其中没有任何内容。


<强>考虑:

  • 使AccountAnalysisBean成为@ViewScoped bean
  • 删除actionListener并改为使用action属性。按照你在这里的代码示例,你真的不需要它。