我需要将一些参数(在我的示例中为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>
Run Code Online (Sandbox Code Playgroud)
豆:
class Bean {
Integer id;
public void setId() {
this.id = id;
}
public void updateVisibility(AjaxBehaviorEvent event) {
// passed id
log.debug(id);
}
}
Run Code Online (Sandbox Code Playgroud)
它已作为请求参数与名称一起发送id.所以,到了关键点(和hacky):
String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
Run Code Online (Sandbox Code Playgroud)
如果bean是请求作用域,您还可以将其设置为托管属性.
@ManagedProperty(value="#{param.id}")
private Integer id; // +setter
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法取决于#{id}实际发起的位置,但根据问题中给定的信息尚不清楚.有些情况下你根本不需要传递它作为请求参数.
将params传递给f:ajax是通过以下方式完成的:
<f:ajax event="valueChange" render="@form" execute="@form" listener="#{bean.updateVisibility}">
<f:param value="#{id}" name="myId">
</f:ajax>
Run Code Online (Sandbox Code Playgroud)