Я получил следующий код для обновления 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, ...