代码之家  ›  专栏  ›  技术社区  ›  Deckard

模型驱动和准备的顺序?

  •  1
  • Deckard  · 技术社区  · 14 年前

    我把 println() 在每个动作类的方法中。

    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");
      //...
     }
    

    因为我记得我在书中读过它,所以我用它来构造bean类,并在 prepare() ,然后在 execute() 我认为getModel是用来把bean推到valueStack的,对吧?

    ……不管怎样,控制台给我看了这个。这很奇怪; 准备getModel执行。

    我曾经创建过处理相同bean的每个action类,当然每个action类中都有相同的代码(变量及其getter和setter)。

    现在我正在尝试创建一个操作来避免重复。这个action类有几个方法(在struts.xml中映射如下; <action name="View_board" method="view"> ).

    正如我们在控制台看到的,这个 view() . 这个 准备() 只构造bean 做真正的工作。但是 getModel() 在调用之前调用 视图() ,因此没有机会将bean放入ValueStack。

    我希望你们能理解我要解释的。

    总而言之,每个动作类都有BoardView,BoardDelete,BoardWrite。。。他们工作得很好!但我讨厌重复的东西,所以我创建了BoardManager类。这个类有每个方法(比如 视图() )这是由类处理的(比如BoardView)。但是这个view()是在 getModel() getModel() )没有机会被推送到ValueStack。

    请帮帮我。教我你在这方面的技术。我正在自己发展,这让我觉得很难。

    谢谢您!!

    2 回复  |  直到 12 年前
        1
  •  5
  •   Akku    14 年前

    您必须自己设置Model对象,因为modeldriven拦截器只有在其不为null时才能将其推送到堆栈中。如果您的getModel()如下所示:

    SomeModelClass myModelObject = null;
    
    public Object getModel()
    {
       return myModelObject;
    }
    

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

    ... 或者在字段中初始化它:

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

        2
  •  0
  •   Deckard    14 年前

    我找到了自己的解决办法。。但不是一个好的。。

    它的效果很好,只有2行添加到我的类。