Поле формы калитки - PullRequest
       15

Поле формы калитки

2 голосов
/ 04 марта 2011

Я пытаюсь сделать форму для регистрации пользователя с помощью Wicket.Я получил пользовательский 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: Попытка установить объект модели на нулевой модели компонента:

или чтоМодель пользователя не имеет методов, связанных с паролем2.Как справиться с таким делом?

Ответы [ 2 ]

5 голосов
/ 04 марта 2011

Это должно сделать это:

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

Объяснение: CompoundPropertyModel связывает вложенные элементы формы с родительской моделью (имя компонента foo сопоставляется со свойством bean.foo родительской модели). Вы можете перезаписать это поведение, назначив другую модель дочернему компоненту.

0 голосов
/ 15 марта 2011

Я бы использовал свойство в форме и 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);
}
...