2013-07-23 16 views
1

У меня есть специальная проблема: мне нужно отправить значение на сервер по событию onchange без отправки всей формы. Есть ли какая-то особенность?f: ajax by onchange event

Я могу справиться компонент с помощью Javascript:

<h:inputText onchange= ...js... > 

И я могу отправить значение по AJAX:

<f:ajax execute="name"/> 

Как положить его вместе?


Она решается, но у меня есть еще один вопрос:

Что обрабатывается раньше - Ajax обработки события или обработки JavaScript?

+1

Да, вы можете использовать ajax, вот почему он был введен, чтобы отправить определенные данные на сервер. вы можете использовать вызов JQuery ajax. Ref: http: //api.jquery.com/jQuery.ajax/ – dreamweiver

+0

Возможно, это решение: http://www.jsftoolbox.com/documentation/help/12-TagReference/ core/f_ajax.html (атрибут слушателя и реализация метода handleEvent (событие AjaxBehaviorEvent)). –

+0

Я хочу решить эту проблему на сервере. Я также могу использовать атрибут события: http://stackoverflow.com/questions/7886453/what-values-can-i-pass-to-the-event-attribute-of-the-fajax-tag –

ответ

4

Простой, AJAX был разработан для частичных представлений/обновлений, которые происходят на странице. Вам просто нужно указать атрибут event тега <f:ajax> и пусть он будет change, как вы пожелаете. Согласно частичной форме submit укажите идентификаторы компонентов, которые должны быть обновлены на сервере в атрибуте execute тега. Но поскольку значение по умолчанию для execute - это точно @this (компонент, который запускает событие), вы можете полностью его опустить. Как так:

<h:inputText id="text" value="#{bean.text}"> 
    <f:ajax event="change"/> 
</h:inputText> 

Таким образом, после того, как произойдет событие изменения JavaScript, ваша модель боба будет обновляться за кулисами с помощью AJAX.

В каком случае происходит первый вопрос, вам нужно понять, что это событие JavaScript вызывает отправку запроса AJAX на сервер, поэтому, естественно, последнее происходит первым. Кроме того, вы можете подключить обратный вызов на стороне клиента, чтобы получить привязку к JavaScript, когда ответ AJAX был успешно выполнен, указав атрибут onevent.

+0

Но если я добавлю обработчик события js onchange к вашему h: inputText - что обрабатывается как первый? Я имею в виду Javascript. –

+1

Конечно, обработчик будет выполнен первым. Кроме того, вы можете вернуть 'false' из обработчика onchange, чтобы остановить отправку запроса AJAX. – skuntsel

0

Мой код:

<h:inputText id="appleNO" value="#{xxxModel.appleNO}" size="3" maxlength="3"> 
    <f:ajax event="blur" execute="@form" listener="#{xxxController.xxxAction()}" render="appleNO"/> 
</h:inputText> 

когда TextBox потерял foucs (ONBLUR), xxxAction будет срабатывать.