Как работает интерфейс Struts2 ModelDriven

Я сомневаюсь. Как работает интерфейс Struts2 Modeldriven. В моем приложении я использовал для одной формы. И я разместил сеттеры и геттеры так же, как имена форм. Можно ли разместить несколько объектов ModelDriven с помощью сеттера и геттера. Если я так поставлю, то как он распознает?


person jayavardhan    schedule 22.12.2010    source источник
comment
Избегайте modelDriven, если ваша форма не является многостраничной (и, возможно, даже в этом случае).   -  person Quaternion    schedule 23.12.2010
comment
@Quaternion, что вы подразумеваете под многостраничной формой?   -  person KyelJmD    schedule 20.01.2013
comment
@KyelJmD Я думаю со стороны сервера, на стороне клиента это будут отдельные страницы и, следовательно, отдельные формы, но на стороне сервера вы используете несколько действий в одной модели, и концептуально вы думаете обо всем как о едином форма. Вот что я имел в виду, возможно, я мог бы подобрать слова лучше. Если что-то нужно искать, методы ajax, как правило, более интуитивно понятны, и тогда можно выполнить одно представление ... конечно, есть компромиссы.   -  person Quaternion    schedule 21.01.2013
comment
Я использовал ModelDriven не так давно. Я хотел объект на вершине стека, но не знал, что это будет за объект, за исключением того, что это будет объект JPA. Вызов подготовит действие и установит правильный объект, таким образом, когда объекты ORM будут обновлены, сервис и уровень действия могут оставаться постоянными. Однако то, что клиент мог бы назвать, изменится. В любом случае, дело в том, что я хотел что-то наверху стека, но не знал до времени выполнения, в этом случае я думал, что это помогло.   -  person Quaternion    schedule 21.01.2013


Ответы (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;
    }
}
person Steven Benitez    schedule 22.12.2010
comment
Я отчасти думаю, что модель, управляемая глупо. Если ваша модель называется Person, почему бы просто не иметь свойство person? Struts2 сможет получить доступ к глубоко вложенным свойствам из формы так же, как мы можем получить доступ из представления. С управляемой моделью у вас может быть только одна модель, в то время как при обычном способе вы можете иметь столько объектов, сколько хотите. Проблема, вероятно, связана с получением объекта, которое можно решить с помощью DI, тогда нам не нужны интерфейсы Preparable или ModelDriven. - person Quaternion; 23.12.2010
comment
Хотя я нахожу Preparable весьма полезным, я согласен с ModelDriven, Quaternion. Лично я просто использую объекты непосредственно в действии. - person Steven Benitez; 23.12.2010
comment
Согласен с Кватернионом. Я также не понял смысла ModelDriven. Кроме того, когда вам нужно хранить данные в памяти, сохраните их на карте приложения, доступной через ApplicationContextAware, если вам нужно сохранить пользовательские данные (например, данные профиля), сохраните их на карте сеанса, доступной через интерфейс SessionAware. Сохраняться в базе данных всегда. - person Akku; 26.12.2010

Согласен... ModelDriven похож на ActionForm в Struts1, и я считаю, что для того, чтобы иметь сходство, этот подход предусмотрен. Даже тогда, если у вас есть ваша модель, со многими композициями вам придется следовать подходу ObjectBacked, чтобы установить значения содержащихся объектов в модели.

person GGG    schedule 19.01.2011

В случае ModelDriven вы можете заполнить только одно pojo за раз. Вы не можете использовать несколько ModelDriven в одном классе действий. Поскольку метод getModel() заполняет объект Pojo, указанный в ModelDrive<Pojo>. Он попытается найти геттер в этом pojo. Имя поля должно совпадать с именами форм.

person MayurB    schedule 26.09.2012