2015-09-04 27 views
0

我是一名初學者,發現在其中實施更高級的操作非常困難。顯示錯誤的簡易方式

所以我有一個窗體,裏面有一個輸入框和一個提交按鈕。我用自己的邏輯編寫了我自己的驗證器。現在當驗證器失敗時,頁面會重新加載,並且錯誤的值將丟失。我想要的是:

  1. 輸入與錯誤的輸入(驗證失敗的地方)應該是圖形不同,這是得到自己的風格 - 我可以在驗證器本身嗎?還是我必須實現訪問者?我如何爲這種形式註冊?沒有錯誤消息是必要的。
  2. '錯誤的輸入'不應該丟失,應該對用戶可見。

我會永遠感謝一個簡單的解決方案(有一些代碼片段,請)

+0

#1 wicket:for可用於在有錯誤的字段上設置您的標籤樣式。請參閱https://cwiki.apache.org/confluence/display/WICKET/Wicket's+XHTML+tags#Wicket%27sXHTMLtags-Attributewicket:for。您需要爲#2發佈一些代碼,因爲您不應該丟失無效內容。 – JeredM

+0

問題是OnInitialize包含一些代碼加載到我的組件中的值。有什麼方法可以確保提交按鈕在驗證失敗時不會執行任何操作? – Greg

+0

只要您使用IValidator進行驗證,您就不必擔心提交按鈕。當您單擊提交時,Wicket會在輸入您的模型並輸入onSubmit之前查看必填字段,轉換您的輸入並運行驗證程序。如果任何步驟在推送輸入之前失敗,則會調用onError而不是onSubmit。關鍵是使用驗證器,並且不要在onSubmit中驗證。 – JeredM

回答

3

你需要的是一個驗證+行爲。 當FormComponent的標記無效時,需要修改該行爲。

好在他們拌勻:

public class MyValidator extends Behavior implements IValidator<SomeType> {...} 

實施IValidator#validate(IValidatable)驗證(你已經有這個),並覆蓋Behavior#onComponentTag(Component, ComponentTag)設置一個CSS類時無效,例如:

@Override public void onComponentTag(Component c, ComponentTag tag) { 
    FormComponent fc = (FormComponent) c; 
    if (!fc.isValid()) { 
    tag.append("class", "error", " "); 
    } 
} 

確保你加載了一個.css文件,該文件定義了具有所需樣式的.error。你可以重寫Behavior#renderHead(Component, IHeaderResponse response) {response.render(CssHeaderItem.forReference(new CssResourceReference(SomeScope.class, "res/css/styles.css")))}

我希望事情現在更清潔。

玩得開心!

+0

您應該將此添加到Wicket網站上的示例。也許用上面的驗證器來增強留言簿示例。 –

+0

拉請求非常歡迎! https://github.com/apache/wicket-site –