Закрытие всплывающего окна, только если форма действительна
Я хочу проверить мое поле 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.