2011-03-04 68 views
2

我試圖讓用戶使用Wicket進行註冊。我得到了用戶POJO和wicket表單 - 這需要有「重複密碼」字段,該字段應該不會與用戶對象連接。但我該怎麼做?我檢票口虛擬表格字段

public class RegisterForm extends Form<User> { 

private static final long serialVersionUID = -9071906666130179515L; 

public RegisterForm(String id) { 
    super(id, new CompoundPropertyModel<User>(new User())); 

    PasswordTextField pass = new PasswordTextField("password"); 
    pass.setType(String.class); 

    PasswordTextField pass2 = new PasswordTextField("password2"); 
    pass2.setType(String.class); 
    pass2.setDefaultModelObject(""); 

    add(new EqualPasswordInputValidator(pass, pass2)); 

    add(new TextField<String>("login") 
       .setType(String.class) 
       .setRequired(true) 
       .add(new PatternValidator("[a-z0-9]*"))); 

    add(new TextField<String>("email") 
       .setType(String.class) 
       .add(EmailAddressValidator.getInstance())); 

    add(pass); 

    add(pass2); 
} 

,但我得到

java.lang.IllegalStateException: 嘗試設置模型對象空 模型組件:

或用戶模型沒有密碼2相關方法。如何處理這種情況?

回答

5

這應該做到這一點:

PasswordTextField pass2 = new PasswordTextField("password2", Model.of("")); 

說明:CompoundPropertyModel關聯嵌套父模型(組件名稱foo被映射到父模型的屬性)形式的元件。您可以通過爲子組件分配不同的模型來覆蓋此行爲。

0

我會在窗體中使用一個屬性,並使用PropertyModel。通過這種方式,我可以通過getPassword2()方法訪問該字段。

public class RegisterForm extends Form<User> { 

private static final long serialVersionUID = -9071906666130179515L; 

// password2 Property 
protected String password2 = ""; 

public String getPassword2() { 
    return password2; 
} 

public void setPassword2(String password2) { 
    this.password2 = password2; 
} 
// end password2 Property 

public RegisterForm(String id) { 
    super(id, new CompoundPropertyModel<User>(new User())); 

    PasswordTextField pass = new PasswordTextField("password"); 
    pass.setType(String.class); 

    // add new PropertyModel 
    PasswordTextField pass2 = new PasswordTextField("password2", new PropertyModel<String>(this, "password2")); 

    add(new EqualPasswordInputValidator(pass, pass2)); 

    add(new TextField<String>("login") 
       .setType(String.class) 
       .setRequired(true) 
       .add(new PatternValidator("[a-z0-9]*"))); 

    add(new TextField<String>("email") 
       .setType(String.class) 
       .add(EmailAddressValidator.getInstance())); 

    add(pass); 

    add(pass2); 
}