Как передать дополнительные параметры в ajax-запросе на изменение значения в h: selectOneMenu? - PullRequest
5 голосов
/ 24 января 2011

Мне нужно передать некоторые параметры (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>

Bean:

class Bean {
    Integer id;

    public void setId() {
       this.id = id;
    }

    public void updateVisibility(AjaxBehaviorEvent event) { 
       // passed id
       log.debug(id);
    }
}

Ответы [ 2 ]

7 голосов
/ 24 января 2011

Отправлено как параметр запроса с именем id. Итак, к делу (и хаки):

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

Если bean-компонент является областью запроса, вы также можете сделать его управляемым свойством.

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

Могут быть и более эффективные способы, в зависимости от того, где на самом деле происходит #{id}, что пока неясно на основании информации, предоставленной в этом вопросе. Именно в таких ситуациях вам вообще не нужно передавать его в качестве параметра запроса.

6 голосов
/ 25 января 2011

Передача параметров в f: ajax выполняется:

<f:ajax event="valueChange" render="@form" execute="@form" listener="#{bean.updateVisibility}">
    <f:param value="#{id}" name="myId">
</f:ajax>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...