【问题标题】:Issue passing parameters using f:viewParam使用 f:viewParam 发出传递参数
【发布时间】:2014-02-25 17:44:24
【问题描述】:

我有一个 JSF 页面,它显示从给定帐户的数据库中提取的大量数据项。该页面有一个 SelectOneMenu,其中列出了数据库中可供选择的所有帐户,还有一个命令按钮,用于触发使用新选择的帐户重新加载页面。我的问题是当我单击命令按钮页面重新加载但没有使用新选择的帐户时。正在执行方法 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

【问题讨论】:

    标签: jsf jsf-2 primefaces actionlistener


    【解决方案1】:

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

    • &lt;f:viewParam/&gt; 将在初始页面加载时使用定义的 setter 设置 AccountAnalysisBean bean 中的值

    • 页面加载完成后,AccountAnalysisBean 被销毁:它是一个 @RequestScoped bean。

    • 因此,当您单击命令按钮时,您会从 AccountAnalysisBean 的新副本开始,其中没有任何内容。


    考虑:

    • 使AccountAnalysisBean 成为@ViewScoped bean
    • 摆脱actionListener 并改用action 属性。根据您在此处的代码示例,您实际上并不需要它。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-22
      • 2012-05-24
      • 2011-04-22
      • 2013-10-14
      • 2012-04-28
      相关资源
      最近更新 更多