我是一名初學者,發現在其中實施更高級的操作非常困難。顯示錯誤的簡易方式
所以我有一個窗體,裏面有一個輸入框和一個提交按鈕。我用自己的邏輯編寫了我自己的驗證器。現在當驗證器失敗時,頁面會重新加載,並且錯誤的值將丟失。我想要的是:
- 輸入與錯誤的輸入(驗證失敗的地方)應該是圖形不同,這是得到自己的風格 - 我可以在驗證器本身嗎?還是我必須實現訪問者?我如何爲這種形式註冊?沒有錯誤消息是必要的。
- '錯誤的輸入'不應該丟失,應該對用戶可見。
我會永遠感謝一個簡單的解決方案(有一些代碼片段,請)
我是一名初學者,發現在其中實施更高級的操作非常困難。顯示錯誤的簡易方式
所以我有一個窗體,裏面有一個輸入框和一個提交按鈕。我用自己的邏輯編寫了我自己的驗證器。現在當驗證器失敗時,頁面會重新加載,並且錯誤的值將丟失。我想要的是:
我會永遠感謝一個簡單的解決方案(有一些代碼片段,請)
你需要的是一個驗證+行爲。 當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")))}
。
我希望事情現在更清潔。
玩得開心!
您應該將此添加到Wicket網站上的示例。也許用上面的驗證器來增強留言簿示例。 –
拉請求非常歡迎! https://github.com/apache/wicket-site –
#1 wicket:for可用於在有錯誤的字段上設置您的標籤樣式。請參閱https://cwiki.apache.org/confluence/display/WICKET/Wicket's+XHTML+tags#Wicket%27sXHTMLtags-Attributewicket:for。您需要爲#2發佈一些代碼,因爲您不應該丟失無效內容。 – JeredM
問題是OnInitialize包含一些代碼加載到我的組件中的值。有什麼方法可以確保提交按鈕在驗證失敗時不會執行任何操作? – Greg
只要您使用IValidator進行驗證,您就不必擔心提交按鈕。當您單擊提交時,Wicket會在輸入您的模型並輸入onSubmit之前查看必填字段,轉換您的輸入並運行驗證程序。如果任何步驟在推送輸入之前失敗,則會調用onError而不是onSubmit。關鍵是使用驗證器,並且不要在onSubmit中驗證。 – JeredM