Dec*_*ard 1 model-driven struts2
我把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");
//...
}
Run Code Online (Sandbox Code Playgroud)
我以为订单会是; 准备→执行→getModel.
因为我记得我在书中读过它,所以我习惯构造bean类并做一些逻辑prepare()
,然后返回SUCCESS execute()
.我认为getModel用于将bean推送到valueStack,对吧?
......无论如何,控制台告诉我这个.这很奇怪; 准备→getModel→执行.
这对我来说是一个巨大的问题.用英语解释原因很难......但我会试试!
我曾经创建过处理相同bean的每个动作类,当然每个动作类中都有相同的代码(变量,它们的getter和setter).
现在我正在尝试创建一个操作来避免重复.这个动作类有几个方法(像这样在struts.xml中映射; <action name="View_board" method="view">
).
正如我们在控制台中看到的那样,view()
在动作类的最后一个调用它execute()
.该prepare()
不会只是构建豆和view()
做真正的就业机会.但是getModel()
在调用之前调用view()
,所以没有机会将bean放到ValueStack.
我希望你们明白我要解释的是什么.
总结一下,每个动作类都像BoardView,BoardDelete,BoardWrite ......它们运作良好!但我讨厌那些重复的东西,所以我创建了BoardManager类.这个类有每个方法(比如view()
)由类处理(比如BoardView).但是这个view()是在调用之后调用的getModel()
,所以bean(return of getModel()
)没有机会被推送到ValueStack.
请帮帮我.教我你在这个领域的专业知识.我正在自己开发这一切,这让我感觉很难受.
谢谢!!
您必须自己设置Model对象,因为modeldriven拦截器只能将其推送到堆栈(如果它不为null).如果你的getModel()看起来像这样:
SomeModelClass myModelObject = null;
public Object getModel()
{
return myModelObject;
}
Run Code Online (Sandbox Code Playgroud)
...你必须设置modelObject,以便它可以被推送到valueStack.你可以这样做我猜:
public void prepare(){
myModelObject = new myModelObject("I'm so new");
}
Run Code Online (Sandbox Code Playgroud)
...或者只是在现场初始化它:
SomeModelClass myModelObject = new myModelObject("I'm so new");
Run Code Online (Sandbox Code Playgroud)
不要忘记实现适当的接口(ModelDriven和Preparable).希望这个对你有帮助.
归档时间: |
|
查看次数: |
2684 次 |
最近记录: |