2016-05-06 2 views
-1

Я хочу проверить свое поле inputText, которое находится в popupPanel. Он должен содержать только числа.Закрытие всплывающего окна только в том случае, если форма действительна

<h:form> 
    <h:outputText value="Input:"/> 
     <h:inputText id="myID" value="#{myBean.field}" 
      validatorMessage="Only numbers"> 
      <f:validateRegex pattern="([0-9])*$" /> 
      <rich:validator /> 
      <a4j:ajax event="change" render="msgValidator" /> 
     </h:inputText> 
     <h:message id="msgValidator" for="myID" styleClass="text_colorRed" /> 
</h:form> 

В конце концов, я хочу сохранить все с помощью кнопки. Если вход правильный, я хочу закрыть всплывающее окно, иначе я хочу повторно вставить правильный ввод без закрытия всплывающего окна.

<a4j:ajaxButton type="submit" value="Save" styleClass="text_weigthBold" 
    action="#{myBean.save()}" render="myTable" 
    oncomplete="#{rich:component('myPopup')}.hide();" execute="@this"> 
</a4j:ajaxButton> 

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

Я также использовал Java-валидатор, но поведение по-прежнему остается прежним.

Что я могу сделать, чтобы исправить эту ошибку?

ответ

0

Это потому, что вы закрываете всплывающее окно безоговорочно. Вы должны убедиться, что проверка прошла нормально. В JSF 2.0 вы можете использовать FacesContext#isValidationFailed().

<a4j:commandButton execute="@form" value="Save" styleClass="text_weigthBold" 
    oncomplete="if (!#{facesContext.validationFailed}) {#{rich:component('myPopup')}.hide();}" 
    action="#{myBean.save}" render="myTable" /> 

Для проверки также другие ошибки, которые можно использовать facesContext.maximumSeverity.ordinal gt 0 или facesContext.maximumSeverity != null.

Я не знаю RF 3.X (и вы не сказали, используете ли вы RF 3 или 4), но похоже, что у него никогда не было компонента с именем a4j:ajaxButton, вы имели в виду a4j:commandButton? Также обратите внимание, что я изменил action="#{myBean.save()}" на action="#{myBean.save}", который является корневым.

+0

Я использую Richfaces 4.2, и да, это a4j: commandButton. К сожалению, если я использую facesContext.validationFailed, это неверно, потому что, когда я ввожу правильный ввод и сохраняю, всплывающее окно не закрывается. Он вызывает действие, и ответ правильный, но всплывающее окно остается открытым. Что я могу сделать? –

+0

@ travis_91 Я обновил свой ответ. Вы должны изменить выполнение на '@ form' или что-то еще, что вы хотите (я использую popupId для этого типа издания во всплывающем окне), потому что вы должны зафиксировать ввод (так что вы также можете передать идентификатор ввода). –

+0

Я попытался изменить выполнение с помощью @form или Id всплывающего окна, но когда я нажимаю кнопку, он не выполняет действие и метод моего компонента. Ты знаешь почему? –

0

Решено. В форме были некоторые h: checkbox, я удаляю флажки, и теперь он отлично работает. Я не знаю, почему флажок Richfaces работает неправильно, но я заменяю их на HTML-флажок.

Смежные вопросы