У меня есть кнопка сброса, и при нажатии это приведет к тому, что f: converter и f: validate будут запущены, что сделало это так, поскольку оно предназначено для очистки полей.
Я читал эту статью, и она продемонстрировала, как сохранить подтверждение, когда я нажимаю на кнопку "Сброс", используя immediate="true"
и это отлично работает... только для первой кнопки сброса.
Тем не менее, у меня есть несколько кнопок сброса и все их атрибуты имеют атрибут immediate="true"
и все же он работает только на первой кнопке сброса, я все еще получаю сообщение об ошибке для недопустимых данных для остальных 3 кнопок сброса.
В случае необходимости использования фонового рисунка мой XHTML выглядит примерно так:
<a4j:outputPanel ajaxRendered="true">
<h:messages globalOnly="true" showDetail="false" infoClass="info" warnClass="warning" errorClass="error" fatalClass="fatal" />
<h:message for="field1" errorClass="error"></h:message>
<h:message for="field2" errorClass="error"></h:message>
<h:message for="field3" errorClass="error"></h:message>
<h:message for="field4" errorClass="error"></h:message>
</a4j:outputPanel>
<h:form id="form1" rendered="true">
<h:panelGrid columns="8">
<h:outputText value="#{bundle.label}" />
<h:inputText id="field1" size="18" maxlength="18" immediate="true"
value="#{myBean.myField1}">
<f:converter converterId="LongConverter" />
<f:validateLength minimum="1" maximum="18"></f:validateLength>
</h:inputText>
</h:panelGrid>
<h:commandButton id="reset1" type="submit" value="#{bundle.label}" onclick="resetField()"
styleClass="button" action="#{myBean.reset1}" immediate="true" />
</h:form>
<h:form id="form2" rendered="true">
<h:panelGrid columns="8">
<h:outputText value="#{bundle.label}" />
<h:inputText id="field2" size="18" maxlength="18" immediate="true"
value="#{myBean.myField2}">
<f:converter converterId="LongConverter" />
<f:validateLength minimum="1" maximum="18"></f:validateLength>
</h:inputText>
</h:panelGrid>
<h:commandButton id="reset2" type="submit" value="#{bundle.label}" onclick="resetField()"
styleClass="button" action="#{myBean.reset2}" immediate="true" />
</h:form>
<h:form id="form3" rendered="true">
<h:panelGrid columns="8">
<h:outputText value="#{bundle.label}" />
<h:inputText id="field3" size="18" maxlength="18" immediate="true"
value="#{myBean.myField3}">
<f:converter converterId="LongConverter" />
<f:validateLength minimum="1" maximum="18"></f:validateLength>
</h:inputText>
</h:panelGrid>
<h:commandButton id="reset3" type="submit" value="#{bundle.label}" onclick="resetField()"
styleClass="button" action="#{myBean.reset3}" immediate="true" />
</h:form>
<h:form id="form4" rendered="true">
<h:panelGrid columns="8">
<h:outputText value="#{bundle.label}" />
<h:inputText id="field4" size="18" maxlength="18" immediate="true"
value="#{myBean.myField4}">
<f:converter converterId="LongConverter" />
<f:validateLength minimum="1" maximum="18"></f:validateLength>
</h:inputText>
</h:panelGrid>
<h:commandButton id="reset4" type="submit" value="#{bundle.label}" onclick="resetField()"
styleClass="button" action="#{myBean.reset4}" immediate="true" />
</h:form>
Я действительно не знаю, проблема в том, что кнопка или ajax разделяются несколькими формами? Может ли кто-нибудь сказать мне правильный способ сделать это, когда есть несколько кнопок/полей сброса, например, выше?
Изменить: я попытался удалить все немедленные = истинные с кнопок Сброс, и, конечно, сообщение об ошибке теперь отображается при нажатии кнопки "Сброс". Но я заметил, что он делает это только на последних трех путях сброса, а не на первом...?
Я надеюсь, что это даст больше понимания кому-то, кто знает, что вызывает это
У вас есть immediate="true"
в полях ввода, что также делает их обработанными.