2011-03-04 9 views
2

위젯을 사용하여 사용자 등록 양식을 만들려고합니다. 나는 사용자 POJO와 개찰판을 가지고있다 - 이것은 사용자 객체에 연결되어서는 안되는 "반복 암호"필드를 가져야한다. 하지만 어떻게해야합니까? I위젯 더미 양식 필드

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

수 : 널 (null)에 구성 요소의 모델 모델 객체를 설정하려고 :

을하거나 사용자 모델 관련없는 암호 2가 없습니다 행동 양식. 그런 사건을 어떻게 처리할까요?

답변

5

이 그것을 수행해야합니다

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

설명 : 상위 모델 (구성 요소 이름 foo 상위 모델의 속성에 매핑되는)와 CompoundPropertyModel 동료 중첩 된 폼 요소를. 자식 구성 요소에 다른 모델을 할당하여이 동작을 덮어 쓸 수 있습니다.

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); 
}