2014-04-01 51 views
0

我有一個重置按鈕,點擊後會導致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通過多種形式被共享?有人可以告訴我在上面有多個重置按鈕/字段時這樣做的正確方法嗎?

編輯: 我試圖消除所有直接=真正從復位按鈕,當然點擊復位按鈕時,錯誤訊息現在顯示。但我注意到,它只在最後三個窗體重置按鈕上執行,而不是第一個...?

我希望這給更多的瞭解的人,知道是什麼原因造成這種

+0

type =「submit」的目標是什麼? – Tires

+0

@Tires我認爲需要爲action =「」屬性調用支持bean myBean.methodName?如果我錯了,請隨時糾正我 – Kairan

+0

我試圖從重置按鈕中刪除所有immediate = true,當然單擊重置按鈕時會顯示錯誤消息。但我注意到,它只在最後三個窗體重置按鈕上執行,而不是在第一個窗體上。 – Kairan

回答

0

你有immediate="true"上的投入領域,這使得它們被處理爲好。

+0

我試圖從所有輸入文本框中刪除immediate =「true」,它確實解決了出現錯誤消息時不應該出現的問題,但現在它不會清除輸入文本框的值? – Kairan

+0

我嘗試從重置按鈕中刪除所有immediate = true,並且當單擊重置按鈕時顯示錯誤消息。但我注意到,它只在最後三個窗體重置按鈕上執行,而不是第一個。 – Kairan