2012-06-11 13 views
4

我記住了,具體情況如下:一,AjaxFormComponentUpdatingBehavior(「平變化」)被添加到一個表單一個TextField。行爲驗證爲一定的條件下(或者模型對象或窗體的組件模型,無所謂)的基礎上,其可能顯示一條消息(或隱藏它,如果已經顯示它)的文本。如何強制檢票「的onchange」被觸發AJAX事件,如果字段驗證失敗的條件

問題是,還有驗證器添加到TextField中。其中一種可能的(可能的)方案由用戶首先輸入,由AJAX請求導致消息顯示。那麼,如果他/她在類型一值沒有通過驗證,則消息應該消失,但事實並非如此。

顯然,對於AJAX行爲要麼的onUpdate()方法不是在所有叫,或者我在我嘗試插入支票未經驗證的條目失敗(我曾試圖測試兩個空值和空字符串,無濟於事;我不知道Wicket的驗證器在數據無效時如何進行建模)。

我想知道,如果有人誰實際瞭解驗證程序(或AJAX,實際上)對其中的問題可能是任何想法。

我可以張貼編輯和郵政編碼,如果有人告訴我,這是不是綁驗證和AJAX一般的問題,但最有可能的一個編程錯誤。我仍然相信前者,因此我不會發布代碼段,以便繼續討論API /理論框架。

謝謝。

回答

8

當使用AjaxFormComponentUpdatingBehavior時,如果IValidator中的任何一個驗證失敗,將調用onError()而不是onUpdate()。 Wicket將有效地防止無效的用戶輸入到達組件的IModel,因此組件的ModelObject根本不會被改變。無效的輸入可能通過getInput()/getConvertedInput()保持可用(不知道它是否會在AJAX場景中,它確實在傳統的表單提交中)。

但是,請注意,使用此機制時,不會執行IFormValidator s。如果你有任何,你可能會感興趣的覆蓋getUpdateModel()使AjaxFormComponentUpdatingBehavior不會帶來可能,無效的用戶輸入您的IModel s和modelobjects手動設置,當你某個用戶輸入有效。

關於您的具體情況,您可以執行onError()(或依靠Model將從其他地方獲取數據)中的所有必需邏輯,並將需要刷新的組件添加到AjaxRequestTarget。這可能是您的情況中缺少的。

+2

謝謝你! onError()似乎正是我所尋找的,並且也會簡化​​我的邏輯。得愛上小門。 – userBigNum

+0

確實:)只需要一點點,直到你瞭解它的力量。我在不知道'getUpdateModel()':)的情況下差不多一年 –

相關問題