1

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

我以为顺序是;准备→执行→getModel。

因为我记得我在书里看过,所以我以前在里面构造bean类并做一些逻辑prepare(),然后在execute(). 而且我认为 getModel 用于将 bean 推送到 valueStack,对吗?

...无论如何,控制台向我展示了这一点。这很奇怪;准备→获取模型→执行。

这对我来说是一个巨大的问题。用英语很难解释原因……但我会努力的!

我曾经创建每个处理相同 bean 的动作类,当然每个动作类中都有相同的代码(变量,以及它们的 getter 和 setter)。

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

正如我们在控制台中看到的,这view()在动作类的最后被调用,例如execute(). prepare()确实只构建bean,并且view()做真正的工作。但是getModel()在调用 of 之前调用view(),因此没有机会将 bean 放入 ValueStack。

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

总而言之,有每个动作类,如 BoardView、BoardDelete、BoardWrite ......并且它们运行良好!但我讨厌重复的东西,所以我创建了 BoardManager 类。此类具有view()由类(如 BoardView)处理的每个方法(如)。但是这个 view() 是在调用 之后调用的getModel(),所以 bean(return of getModel()) 没有机会被推送到 ValueStack 中。

请帮帮我。教我你在该领域的专业知识。我正在自己开发这一切,这让我感觉很艰难。

谢谢!!

4

2 回答 2

5

您必须自己设置模型对象,因为模型驱动的拦截器只有在它不为空时才能将其推送到堆栈中。如果你的 getModel() 看起来像这样:

SomeModelClass myModelObject = null;

public Object getModel()
{
   return myModelObject;
}

...您必须设置模型对象,以便将其推送到 valueStack。我猜你可以这样做:

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

...或者只是在现场初始化它:

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

不要忘记实现适当的接口(ModelDriven 和 Preparable)。希望这个对你有帮助。

于 2010-08-11T12:24:09.957 回答
0

我找到了自己的解决方案..但不是一个好的解决方案..

通过 setter 设置域对象时,我将其手动推送到 valuestack..

它工作得很好,我的班级只增加了 2 行。

但我感觉不是很好。

于 2010-08-10T12:26:21.087 回答