【问题标题】:How to pass additional parameters in ajax request on change value in h:selectOneMenu?如何在 ajax 请求中传递附加参数以更改 h:selectOneMenu 中的值?
【发布时间】:2011-06-14 12:33:21
【问题描述】:

我需要将一些参数(在我的示例中为 id)传递给 f:ajax 侦听器方法,但我不知道如何。有人帮忙吗?

<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);
    }
}

【问题讨论】:

    标签: java jsf jsf-2


    【解决方案1】:

    将参数传递给 f:ajax 由以下方式完成:

    <f:ajax event="valueChange" render="@form" execute="@form" listener="#{bean.updateVisibility}">
        <f:param value="#{id}" name="myId">
    </f:ajax>
    

    【讨论】:

    • 根据我的经验,
    • 除了上面的注释,基本的东西param标签应该有一个结束标签。
    【解决方案2】:

    它已作为请求参数发送,名称为id。所以,直截了当(和hacky):

    String id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");
    

    如果 bean 是请求范围的,您也可以将其设为托管属性。

    @ManagedProperty(value="#{param.id}")
    private Integer id; // +setter
    

    根据#{id} 的实际来源可能有更好的方法,但根据问题中提供的信息尚不清楚。在某些情况下,您根本不需要将其作为请求参数传递。

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多