当我尝试使用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,它不会被传递..
答案 0 :(得分:1)
您是否检查过InsertDataDaoService.ngo_id的值是否为NULL? 尝试用常量值替换它。它有效吗?
答案 1 :(得分:1)
<f:setPropertyActionListener>
在表单提交请求期间进行评估,而不是在显示表单的请求期间进行评估。因此,如果没有为该请求保留其值#{InsertDataDaoService.ngo_id}
,那么它将失败。
你基本上有两个选择:
确保为表单提交请求保留#{InsertDataDaoService.ngo_id}
。究竟如何做到这取决于功能要求,这些要求在问题中并不明确。但通常情况下,将#{InsertDataDaoService}
bean放在视图范围中@ViewScoped
并确保您没有在getter方法中执行任何业务工作就足够了。
将<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帮助函数的一部分内联),而不是在提交表单的请求期间进行评估。