Это потому, что вы не используете модель должным образом.
Эта строка принимает значение объекта модели панели, , заданное при построении , и использует его для созданиямодель компонента.
add(new Label("messageText", new PropertyModel<Message>(getModelObject(), Message.BODY_FIELD)));
Что еще хуже, когда вы нажимаете на ссылку, панели присваивается новая модель:
MessagePanel.this.setDefaultModel(new JPAEntityModel<Message>(nextMessage));
Но это, очевидно, не влияет на модельметки, так как она уже установлена для ссылки на исходное значение.
Таким образом, есть две вещи, которые необходимо изменить, чтобы это работало.Прежде всего, ваша модель метки должна напрямую использовать вашу модель панели:
new Model<Message>() {
@Override
public Message getObject() {
return MessagePanel.this.getModelObject().getMessage(); //or something similar
}
}
(Примечание: приведенный выше код не обязательно является лучшим решением, но это рабочее решение, которое демонстрирует, как модели могут использоваться динамически.)
И в идеале не следует заменять модель при нажатии на ссылку, просто измените объект модели.Если вам нужен собственный класс модели (JPAEntityModel
), вам все равно не следует принимать предварительно созданную модель в конструкторе панели, а только первый объект сообщения.Причина в том, что текущая реализация не требует использования JPAEntityModel
с самого начала, только после первого щелчка по ссылке.