JSf2 отправляет ajax-запросы на сервер отдельных элементов ввода - PullRequest
1 голос
/ 07 июля 2011

У меня есть динамический набор элементов ввода, которые я создаю при загрузке страницы.Мне нужно вызвать запрос ajax, когда каждое из этих текстовых полей меняет свое значение.Мне нужно получить измененное значение и идентификатор измененного элемента.

<h:form> <ui:repeat value="#{aBean.inputItems}" var="content"> 
<h:inputText id="inputfield#{content.id}" value="#{content.value}" label="lbl" >
         <f:ajax execute="@form" event="valueChange" listener="#{aBean.testListener}" render="@this"/>
</h:inputText> 
</ui:repeat> 
</h:form>

у моего компонента поддержки (aBean) есть метод.

public void testListener(AjaxBehaviorEvent event){

}
  1. есть ли способ получитьзначение изменило новое значение поля ввода в методе «testListener»?
  2. иначе это нужно выполнить с помощью javascirpt?

любая обратная связь, связанная с этим, высоко ценится.

Ответы [ 2 ]

2 голосов
/ 07 июля 2011

Два способа:

  1. Просто получите его прямо из родительского компонента <h:inputText>, который вы в свою очередь можете получить из AjaxBehaviorEvent#getComponent().

    UIInput input = (UIInput) event.getComponent();
    String contentId = input.getId().substring("inputfield".length());
    Object contentValue = (Content) input.getValue();
    // ...
    
  2. Получить весь объект Content как текущее значение <ui:repeat var> из карты атрибутов запроса, которую вы в свою очередь можете получить из ExternalContext#getRequestMap().

    Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    Content content = (Content) requestMap.get("content");
    // ...
    
1 голос
/ 07 июля 2011

1) Да, вы меняете значение внутри слушателя.Это будет просто:

this.property = newValue;

2) Если вы делаете это на сервере, то JavaScript не задействован.

...