2011-04-21 58 views
13

如何在Wicket中定義自己的反饋消息? 例如:如果我提供不正確的用戶名,我想要得到一條錯誤消息,如「用戶名不正確,請嘗試再次登錄。」而不是使用默認的錯誤消息。在Wicket中定義自己的反饋消息

一個例子會是什麼樣子?

回答

26

您可以使用error()warn()info()顯示自己的錯誤消息。如果要顯示依賴於驗證器或所需標誌的錯誤,可以使用與包含字段 - >消息映射的類相同的名稱來定義屬性文件。例如:

Index.java

Form form = new Form("myform"); 
form.add(new TextField("name").setRequired(true)); 
form.add(new PasswordTextField("password").setRequired(true)); 
form.add(new TextField("phonenumber").setRequired(true)); 

Index.properties

Required=Provide a ${label} or else... 

所有必需的字段

myform.name.Required=You have to provide a name 

字段name形式myform當它是必需的。

password.Required=You have to provide a password 

任何字段在需要時名稱爲password

phonenumber.Required=A telephone number is obligatory. 

任何字段在需要時名稱爲phonenumber

這顯示了爲特定組件設置反饋消息的各種方法。

你也可以把屬性文件旁邊以下組件級別(按重要性排列,上方最高):

  • 頁面類
  • 組件類
  • 應用程序類
  • 圍牆門應用類

希望能幫到

+1

它如何與Validators的消息一起工作?你只用了setRequired方法。 – user1090145 2012-01-12 21:32:15

2

@ user1090145:我已經使用過載設備的錯誤()方法驗證的類:

private void error(IValidatable<String> validatable, String errorKey) { 
    ValidationError error = new ValidationError(); 
    error.addMessageKey(errorKey); 
    validatable.error(error); 
} 

的validate()

error(validatable, "your-form.field.text-id"); 

屬性你的 - 調用它form.field.text-id必須在YourPage中定義。性能

來源: Create custom validator in WicketForm validation messages

1

你應該設定供給回消息會話

message = "message"; 
Session.get().getFeedbackMessages().success(null, message); 
0

您可以使用匿名IValidationError類和messageSource.getMessage方法來獲取自定義消息從您的財產檔案:

error(new IValidationError() { 
    @Override 
    public Serializable getErrorMessage(IErrorMessageSource messageSource) { 
     //create a list of the arguments that you will use in your message string 
     Map<String, Object> vars = new HashMap<String, Object>(); 
     vars.put("invalidUsername", getInvalidUsernameInput()); 

     //get the message string from the property file 
     return messageSource.getMessage("mysettings.invalid_username", vars); 
    } 
}); 

示例性屬文件:

mysettings.invalid_username=The user name "${invalidUsername}" is incorrect.