我有一個重置按鈕,點擊後會導致f:converter和f:validate被觸發,因爲它是用來清除字段的。忽略JSF按鈕上的驗證點擊
我讀this article,並演示瞭如何從不斷出現的驗證,當我點擊使用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通過多種形式被共享?有人可以告訴我在上面有多個重置按鈕/字段時這樣做的正確方法嗎?
編輯: 我試圖消除所有直接=真正從復位按鈕,當然點擊復位按鈕時,錯誤訊息現在顯示。但我注意到,它只在最後三個窗體重置按鈕上執行,而不是第一個...?
我希望這給更多的瞭解的人,知道是什麼原因造成這種
type =「submit」的目標是什麼? – Tires
@Tires我認爲需要爲action =「」屬性調用支持bean myBean.methodName?如果我錯了,請隨時糾正我 – Kairan
我試圖從重置按鈕中刪除所有immediate = true,當然單擊重置按鈕時會顯示錯誤消息。但我注意到,它只在最後三個窗體重置按鈕上執行,而不是在第一個窗體上。 – Kairan