Закрытие всплывающего окна, только если форма действительна

Я хочу проверить мое поле 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, но поведение остается прежним.

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

2 ответа

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

Это потому, что вы закрываете всплывающее окно безоговорочно. Вы должны проверить себя, была ли проверка в порядке. В 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}" который Corrent.

Другие вопросы по тегам