使用<h:commandbutton>发送值无法在jsf </h:commandbutton>中正常工作

时间:2012-01-19 11:00:43

标签: jsf jsf-2 primefaces

当我尝试使用h发送一些值时:commandButton ...我收到了bean中的空值...

我的xhtml代码是:

  <p:commandButton action="#{favouriteAction.setFavourite}"  value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}">
  <f:setPropertyActionListener target="#{favouriteAction.ngoID}" value="#{InsertDataDaoService.ngo_id}"></f:setPropertyActionListener> 
  </p:commandButton>    

在支持bean中,我只是尝试使用命令按钮打印传递的值,但它变为空...

在favouriteAction.java(我的支持Bean)

  public Integer ngoID;

public Integer getNgoID() {
return ngoID;
}


public void setNgoID(Integer ngoID) {
this.ngoID = ngoID;
}

    public String setFavourite(){

      System.out.println("Ngo id: "+ngoID);
   System.out.println("Ngo id: "+getNgoID);

    return "";
}

在控制台中我得到任何例外,我的o / p是

Ngo id:0 Ngo id:0

是null,它不会被传递..

2 个答案:

答案 0 :(得分:1)

您是否检查过InsertDataDaoService.ngo_id的值是否为NULL? 尝试用常量值替换它。它有效吗?

答案 1 :(得分:1)

<f:setPropertyActionListener>在表单提交请求期间进行评估,而不是在显示表单的请求期间进行评估。因此,如果没有为该请求保留其值#{InsertDataDaoService.ngo_id},那么它将失败。

你基本上有两个选择:

  1. 确保为表单提交请求保留#{InsertDataDaoService.ngo_id}。究竟如何做到这取决于功能要求,这些要求在问题中并不明确。但通常情况下,将#{InsertDataDaoService} bean放在视图范围中@ViewScoped并确保您没有在getter方法中执行任何业务工作就足够了。

  2. <f:setPropertyActionListener>替换为<f:param>@ManagedProperty

    <p:commandButton action="#{favouriteAction.setFavourite}" value="Add as Favorite" rendered="#{favouriteBean.favouriteButton}">
        <f:param name="ngoID" value="#{InsertDataDaoService.ngo_id}" />
    </p:commandButton>
    

    @ManagedProperty("#{param.ngoID}")
    private Integer ngoID;
    

    这样,在显示表单的请求期间,将检索值(并作为commandButton的JavaScript帮助函数的一部分内联),而不是在提交表单的请求期间进行评估。

  3. 另见: