Struts2 模型驱动和准备的顺序?
我将Struts2 模型驱动和准备的顺序?,struts2,model-driven,Struts2,Model Driven,我将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("getMod
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");
//...
}
我以为命令会是;
准备→ 执行→ getModel
因为我记得我在书中读过它,所以我在prepare()
中构造beans类并执行一些逻辑,然后在execute()
中返回SUCCESS。
我认为getModel是用来将bean推到valueStack的,对吗
…不管怎样,控制台给我看了这个。这很奇怪;
准备→ getModel→ 执行
这对我来说是个大问题。很难用英语解释原因。。。但我会努力的
我曾经创建过处理相同bean的每个action类,当然每个action类中都有相同的代码(变量及其getter和setter)
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");
//...
}
现在我尝试创建一个操作来避免重复。这个action类有几个方法(在struts.xml中映射如下;
)
正如我们在控制台中看到的,这个view()
在action类的最后一个部分被调用,比如execute()
。prepare()。但是在调用view()
之前调用了getModel()
,因此没有机会将bean放入ValueStack
我希望你们能理解我想解释的
总而言之,每个动作类都有BoardView、BoardDelete、BoardWrite。。。他们工作得很好!但我讨厌复制东西,所以我创建了BoardManager类。该类具有由类(如BoardView)处理的每个方法(如view()
)。但是这个视图()是在调用getModel()
之后调用的,因此bean(返回getModel()
)没有机会被推送到ValueStack
请帮帮我。教我你在这方面的技术。我正在自己开发这一切,这让我感觉很难
谢谢 我找到了自己的解决办法。。但这不是一个好主意
通过setter设置域对象时,我手动将其推送到valuestack
它工作得很好,只在我的课堂上增加了2行
但是我感觉不太好。我找到了自己的解决办法。。但这不是一个好主意
通过setter设置域对象时,我手动将其推送到valuestack
它工作得很好,只在我的课堂上增加了2行
但是我感觉不太好。您必须自己设置模型对象,因为modeldriven拦截器只能在其不为null时将其推送到堆栈中。如果您的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)。希望这能有所帮助。您必须自己设置模型对象,因为模型驱动拦截器只能在其不为null时将其推送到堆栈中。如果您的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)。希望这能有所帮助。还有一件奇怪的事。控制台中有3个getModel。。这意味着框架尝试获取模型3次,但没有得到。我猜这是另一件奇怪的事情。控制台中有3个getModel。。这意味着框架尝试获取模型3次,这是缺失的..我猜