如何在ajax请求中传递h:selectOneMenu中的更改值的其他参数?

时间:2011-01-24 13:18:59

标签: java jsf jsf-2

我需要将一些参数(在我的示例中为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);
    }
}

2 个答案:

答案 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>