Проверка JSF и Ajax - Как обновить панели сообщений для ВСЕХ сообщений? - PullRequest
3 голосов
/ 02 мая 2011

Я хочу проверить все поля ввода с помощью AJAX.

Например, есть 3 поля ввода.Два из них требуют минимальной длины 3 символа, а другой проверяется простым регулярным выражением.Для <f:ajax> я настроил событие keyup, чтобы быстро увидеть приближающуюся проверку ajax.Полный пример может выглядеть следующим образом:

   <h:form>
       <h:messages id="messages" />
       <h:inputText id="text1" value="#{bean.text1}">
           <f:validateLength minimum="3" />
           <f:ajax execute="@this" event="keyup" render="messages" />
       </h:inputText>

       <h:inputText id="text2" value="#{bean.text2}">
           <f:validateLength minimum="3" />
           <f:ajax execute="@this" event="keyup" render="messages" />
       </h:inputText>

        <h:inputText id="text3" value="#{bean.text3}">
            <f:validateRegex pattern="[A-Z][a-zA-Z]*" />
            <f:ajax execute="@this" event="keyup" render="messages" />
        </h:inputText>
    </h:form>

Как только я оставляю поле ввода первого ввода с ошибкой, перехожу во 2-е поле и набираю там недопустимые данные, сообщение из первого недопустимого поля исчезает, посколькусообщения возвращаются!Если для параметра execute выполнить @form, все поля будут проверены, как только я начну печатать в первом поле ввода.

Поэтому мой вопрос: как отображать ВСЕ ошибки проверки с помощью AJAX, а не толькопоследнее сообщение от последнего недопустимого поля?

PS: я использую Mojarra 2.0.3 (+ Richfaces + Primefaces) на Websphere

1 Ответ

7 голосов
/ 02 мая 2011

Не возможно.Лучшее, что вы можете сделать, это просто дать каждому вводу свое собственное сообщение.

<h:form>
    <h:panelGrid columns="2">
        <h:inputText id="text1" value="#{bean.text1}">
            <f:validateLength minimum="3" />
            <f:ajax event="keyup" render="text1message" />
        </h:inputText>
        <h:message id="text1message" for="text1" />

        <h:inputText id="text2" value="#{bean.text2}">
            <f:validateLength minimum="3" />
            <f:ajax event="keyup" render="text2message" />
        </h:inputText>
        <h:message id="text2message" for="text2" />

        <h:inputText id="text3" value="#{bean.text3}">
            <f:validateRegex pattern="[A-Z][a-zA-Z]*" />
            <f:ajax event="keyup" render="text3message" />
        </h:inputText>
        <h:message id="text3message" for="text3" />
    </h:panelGrid>
</h:form>

Вы можете в конечном итоге сгруппировать их вместе над формой.

...