Калитка: PropertyModel обновления - PullRequest
0 голосов
/ 15 января 2012

Я получил следующий код для обновления User.class:

 @SuppressWarnings("serial")
 public class UpdateProfilePanel extends Panel{

protected ServiceClientTemp client = ((WicketApplication) (WicketApplication.get())).getClient();
protected User oldUser;
protected User newUser;

public UpdateProfilePanel(String id) {
    super(id);  
    Form updateProfileForm = new UpdateProfileForm("updateProfileForm");
    add(updateProfileForm);
}


class UpdateProfileForm extends Form {

    private FormComponent formForename;
    private FormComponent formSurname;
    private FormComponent formEmail;

    public UpdateProfileForm(String id) {
        super(id);
        oldUser = client.getSessionUser();
        formForename = new TextField("forename1", new PropertyModel(oldUser, "forename"));
        formSurname = new TextField("surname1", new PropertyModel(oldUser, "surname"));
        formEmail = new TextField("email1", new PropertyModel(oldUser, "email"));
        add(formForename);
        add(formSurname);
        add(formEmail);
    }

    public void onSubmit() {
        newUser = new User();
        newUser.setForename(formForename.getInput());
        newUser.setSurname(formSurname.getInput());
        newUser.setEmail(formEmail.getInput());
    }
}



  }

Когда я ввожу новое имя и нажимаю кнопку «Отправить», новое значение остается в текстовом поле. Для последующих работ это нормально, но просто для понимания: почему он обновляет мое текстовое поле, когда PropertyModel ссылается на oldUser, а client.getSessionUser () я получаю все еще oldUser. В серверной части не было обновлений.

На той же веб-странице у меня есть другая панель, которая дает мне актуальную информацию о пользователе.

 @SuppressWarnings("serial")
public class UserInfoPanel extends Panel {

protected ServiceClientTemp client = ((WicketApplication) (WicketApplication.get())).getClient();
protected User infoUser;


@SuppressWarnings("rawtypes")
UserInfoPanel(String id) {
    super(id);


    infoUser = client.getSessionUser();
    add(new Label("username", new PropertyModel(infoUser, "username")));
    add(new Label("surname", new PropertyModel(infoUser, "surname")));
    add(new Label("forename", new PropertyModel(infoUser, "forename")));
    add(new Label("email", new PropertyModel(infoUser, "email")));
    add(new Label("state", new PropertyModel(infoUser, "state")));

}

  }

Также эти метки превращаются в новое значение, хотя он по-прежнему получает oldUser с помощью client.getSessionUser (), потому что метод обновления еще не реализован.

Надеюсь, кто-нибудь сможет объяснить, почему PropertyModels ссылается на newUser вместо oldUser. Почему еще я создаю свою PropertyModel как PropertyMode (oldUser, ...

1 Ответ

3 голосов
/ 15 января 2012

Вот так работают модели.

С

 formForename = new TextField("forename1", new PropertyModel(oldUser, "forename"));

вы устанавливаете ссылку на вашего oldUser для свойства "имя".

Теперь, когда вы отправляете форму, модель обновляется, так что свойство «имя» объекта oldUser обновляется с новым значением.

Все о моделях здесь: https://cwiki.apache.org/WICKET/working-with-wicket-models.html

...