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

mar*_*osh 5 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>
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)

Bal*_*usC 7

它已作为请求参数与名称一起发送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}实际发起的位置,但根据问题中给定的信息尚不清楚.有些情况下你根本不需要传递它作为请求参数.


Ben*_*hik 6

将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)

  • 根据我的经验,<f:param>在<f:ajax>标记内不起作用.它应该直接位于UICommand组件内.请参阅此http://stackoverflow.com/questions/11832607/fajax-doesnt-work-when-parameters-are-passed-using-fparam/11833612#11833612 (6认同)