2011-03-04 62 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); 
}