如何在單擊按鈕時跳過JSR-303使用JSF進行Bean驗證?JSF 2.0:如何跳過JSR-303 bean驗證?
有點冗長的問題,解釋了幾個方法......在形式考慮一個列表:
<h:form id="form">
<h:commandButton value="Add row">
<f:ajax execute="foo" listener="#{bean.add()}" render="foo" />
</h:commandButton>
<h:dataTable id="foo" var="foo" value="#{bean.foos}">
<h:column>
Name: <h:inputText id="field" value="#{foo.name}" required="true" />
<h:messages for="field" />
</h:column>
<h:column>
<h:commandButton value="Remove">
<f:ajax execute=":form:foo" listener="#{bean.remove(foo)}" render=":form:foo" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
當用戶點擊添加或刪除行,動作應該沒有驗證執行。問題是,JSF重新呈現整個列表並嘗試驗證它。如果存在未驗證的草稿更改,則會發生驗證錯誤,並且從不調用偵聽器方法(因爲驗證失敗會阻止該方法)。但是,將immediate="true"
添加到f:ajax中,即使驗證錯誤仍然允許執行該方法。但是,驗證錯誤仍然存在,並在此處顯示。
我看到兩個選項:
1)使用直接= 「true」 和不顯示驗證錯誤
對於非確認按鈕,設置immediate = 「true」,併爲H:信息辦:
<h:messages rendered="#{param['SHOW_VALIDATION']}" />
然後設置保存按鈕(實際應該儘量保存表單)發送該參數:
<h:commandButton>
<f:param name="SHOW_VALIDATION" value="true" />
</h:commandButton>
這會導致驗證發生,但僅當SHOW_VALIDATION
參數存在時纔會顯示消息。
2)在小面聲明驗證有條件:
<h:inputText>
<f:validateRequired disabled="#{!param['VALIDATE']}" />
</h:inputText>
和保存按鈕:
<h:commandButton>
<f:param name="VALIDATE" value="true" />
</h:commandButton>
這導致字段來驗證僅當VALIDATE
參數存在(=當保存按鈕已被按下)。
但這些似乎有點黑客。我如何簡單地使用JSR-303 Bean驗證,但在聲明時跳過它?
那麼,我還沒有嘗試任何其他的驗證解決方案比JSR-303和JSF facelets。我認爲這個問題與JSF相關,而不是JSF-303的錯誤 - 就像他們忘記了「原生」支持在JSF中跳過驗證。似乎有很多這方面的困惑...... – 2011-01-31 16:33:47