Смешивание Ajax и полных запросов в JSF 2.0 - PullRequest
2 голосов
/ 10 марта 2011

Код JSF, который вызывает у меня проблемы, следующий:

<h:panelGrid columns="3">
          <!-- Minimum Password Length -->
          <h:outputText value="#{i18n['xxx']}:" />
                        <h:inputText id="minLength"
                                     value="#{passwordPolicies.minLength.paramValue}"
                                     required="true">
                            <f:validateLongRange minimum="1"/>
                            <f:ajax event="valueChange"
                                    render="@this minLengthMessage"
                                    listener="passwordPolicies.testListener"/>
                        </h:inputText>
                        <h:message id="minLengthMessage"
                                   for="minLength"
                                   errorClass="error"
                                   tooltip="true"/-->
                <!-- Many other validation fields -->
<h:panelGrid/>

Во-первых, у меня очень похожая проблема: f: слушатель ajax никогда не запускается . Я должен объединить Ajax и полные запросы на моей странице JSF. Джим Дрисколл @ java.net говорит, что для того, чтобы эти 2 работали, должен быть настроен прослушиватель ошибок Ajax? Это сильно отличается от свойства listener тега ajax ?

Теперь я знаю, что могу попробовать теги Primefaces p: inputText и p: ajax, но они потребуют от меня отдельных прослушивателей для всех моих проверяемых полей. Есть ли способ исправить прослушиватель ошибок f: ajax, чтобы он срабатывал и не получал неприятный:

enter image description here

Спасибо за любой вклад!

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

Вам нужно заставить вашу командную кнопку вместо этого запускать ajax-запрос.

<h:commandButton value="Submit" action="#{bean.submit}">
    <f:ajax execute="@form" render="@form" />
</h:commandButton>

Эти <f:ajax> слушатели не являются обязательными. Они просто использовались в качестве примера в статье Джима, чтобы проиллюстрировать состояние гонки. Который вызывается первым? Очевидно, вы хотели бы сначала вызвать слушателей.

Практический пример почти такой же формы можно найти в этой главе из этого урока . Только blur используется вместо valueChange, потому что valueChange не будет вызываться, когда вы размываете поле required="true", которое остается пустым, что приводит к тому, что сообщение «Значение требуется» никогда не появится такое поле.

0 голосов
/ 28 июля 2015

, если вы хотите добавить монитор, вот как:

<h:commandButton value="Submit"  action="#{yourBean.YourAction}" render="thisIsWhereYouWantToDisplay">
<f:ajax onevent="monitor" execute="@form" render="@form" />
                                        </h:commandButton>
0 голосов
/ 19 марта 2013

Просто запишите это здесь для потомков, но создание обработчика ошибок в JavaScript и последующая ссылка на него из тега f:ajax подавит предупреждение об ошибке и вызовет вызов вашего обработчика ошибок с сообщением об ошибке.Такое поведение описано в статье Джима Дрисколла, упомянутой в вопросе, но не продемонстрированной специально.Я проверил, что это работает:

function onAjaxError( error ) { console.log( error.description ); }

<f:ajax onerror="onAjaxError" ...>

...