Я сомневаюсь. Как работает интерфейс Struts2 Modeldriven
. В моем приложении я использовал для одной формы. И я разместил сеттеры и геттеры так же, как имена форм. Можно ли разместить несколько объектов ModelDriven
с помощью сеттера и геттера. Если я так поставлю, то как он распознает?
Как работает интерфейс Struts2 ModelDriven
Ответы (3)
Любое действие, реализующее интерфейс ModelDriven
, должно предоставлять метод getModel()
, который возвращает объект, представляющий модель действия. Предполагается, что любые параметры, передаваемые действию, являются подсвойствами модели. У вас может быть только одна модель для каждого действия в действии ModelDriven.
Например, предположим, что у нас есть модель с именем Profile
и действие для редактирования нашего профиля. В нашей форме у нас есть текстовое поле для нашего веб-сайта. Без использования ModelDriven
у вас были бы методы getWebsite
и setWebsite
в вашем действии. С ModelDriven
вместо этого будут вызываться геттер и сеттер модели. Фактически, getModel().setWebsite("http://stackoverflow.com")
.
Пример
public class EditProfileAction extends ActionSupport implements ModelDriven<Profile> {
private Profile profile;
// todo: other methods
@Override
public Profile getModel() {
return profile;
}
}
public class Profile {
private String website;
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
}
Согласен... ModelDriven похож на ActionForm в Struts1, и я считаю, что для того, чтобы иметь сходство, этот подход предусмотрен. Даже тогда, если у вас есть ваша модель, со многими композициями вам придется следовать подходу ObjectBacked, чтобы установить значения содержащихся объектов в модели.
В случае ModelDriven
вы можете заполнить только одно pojo за раз. Вы не можете использовать несколько ModelDriven
в одном классе действий. Поскольку метод getModel()
заполняет объект Pojo, указанный в ModelDrive<Pojo>
. Он попытается найти геттер в этом pojo. Имя поля должно совпадать с именами форм.