Последовательность ModelDriven и Prepare?

Я положил println() в каждом методе класса Action.

public String execute() throws Exception {
  System.out.println("execute");
  //...
 }
 public void prepare() throws Exception {
  System.out.println("prepare");
  //...
 }
 public Object getModel() {
  System.out.print("getModel");
  //...
 }

Я думал, что порядок будет; подготовить → выполнить → получить модель.

Поскольку я помню, я читал это в книге, поэтому я использовал для создания класса бобов и сделать некоторые логики в prepare()и просто верните УСПЕХ в execute(), И я думаю, что getModel для толкания bean-компонента к valueStack, верно?

... в любом случае консоль показала мне это. Это очень странно; подготовить → получить модель → выполнить.

И это становится огромной проблемой для меня. Очень сложно объяснить причину по-английски... но я попробую!

Я использовал для создания каждого класса действий, который имеет дело с одними и теми же bean-компонентами, и, конечно, в каждом классе действий дублируются одинаковые коды (переменные, их получатели и установщики).

Сейчас я пытаюсь создать одно действие, чтобы избежать этого дублирования. Этот класс действия имеет несколько методов (которые отображаются в struts.xml следующим образом;<action name="View_board" method="view">).

И как мы видели в консоли, это view() вызывается в последнем в классе действий, как execute(), prepare() строит только бобы, а view() делает реальную работу. Но getModel() вызывается до вызова view(), так что нет никакого шанса поместить бобы в ValueStack.

Надеюсь, вы, ребята, понимаете, что я пытаюсь объяснить.

Подводя итог, можно сказать, что есть каждый класс действий, такой как BoardView, BoardDelete, BoardWrite... и они работают хорошо! Но я ненавижу эти дубликаты, поэтому я создал класс BoardManager. Этот класс имеет каждый метод (например, view()), который был обработан классом (например, BoardView). Но это представление () было вызвано после вызова getModel()так что боб (возвращение getModel()) не имеет шансов попасть в ValueStack.

Пожалуйста, помогите мне. Научи меня своим ноу-хау в этой области. Я разрабатываю все это самостоятельно, и это заставляет меня чувствовать себя так тяжело.

Спасибо!!

2 ответа

Решение

Вы должны установить объект Model самостоятельно, поскольку перехватчик modeldriven может поместить его в стек только в том случае, если он не равен нулю. Если ваш getModel() выглядит так:

SomeModelClass myModelObject = null;

public Object getModel()
{
   return myModelObject;
}

... вам нужно установить modelObject, чтобы он мог получить значение valueStack. Я думаю, вы могли бы сделать это так:

public void prepare(){
   myModelObject = new myModelObject("I'm so new");
}

... или просто инициализировать его в поле:

SomeModelClass myModelObject = new myModelObject("I'm so new");

Не забудьте реализовать соответствующие интерфейсы (ModelDriven и Preparable). Надеюсь это немного поможет.

Я нашел свое собственное решение.. но не хорошее..

При установке объекта домена с помощью установщика, я помещаю его в стек значений вручную.

Это работает хорошо, и только 2 строки добавлены в мой класс.

Но я не очень хорошо себя чувствую.

Другие вопросы по тегам