我需要将一些参数(在我的示例中为id)传递给f:ajax listener方法,但我不知道如何。有人帮忙吗?
<h:form>
<!-- need to pass id value -->
<input type="hidden" name="id" id="id" value="#{id}"/>
<h:selectOneMenu value="#{visibility}">
<f:selectItems value="#{visibilities}" var="e" itemValue="#{e}" itemLabel="#{e.name}" />
<f:ajax event="valueChange" render="@form" execute="@form" listener="#{bean.updateVisibility}" />
</h:selectOneMenu>
</h:form>
豆:
class Bean {
Integer id;
public void setId() {
this.id = id;
}
public void updateVisibility(AjaxBehaviorEvent event) {
// passed id
log.debug(id);
}
}
答案 0 :(得分:7)
它已作为请求参数发送,名称为id
。所以,到了关键点(和hacky):
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
如果bean是请求作用域,您还可以将其设置为托管属性。
@ManagedProperty(value="#{param.id}")
private Integer id; // +setter
取决于#{id}
实际发起的位置,可能有更好的方法,但根据问题中给定的信息尚不清楚。有些情况下你根本不需要传递它作为请求参数。
答案 1 :(得分:6)
将params传递给f:ajax由:
完成<f:ajax event="valueChange" render="@form" execute="@form" listener="#{bean.updateVisibility}">
<f:param value="#{id}" name="myId">
</f:ajax>