我正在从struts-2一书中学习struts2。他们说,对于将数据传输到对象上,模型驱动的操作比对象支持的bean属性更受欢迎。
some1能解释一下为什么他们这么说吗?
原因是否与需要在视图层中提及引用名称有关
发布于 2010-11-19 01:23:59
在处理多个属性的情况下,本书主张使用对象来保存这些属性,而不是将它们直接放在操作上,以使事情变得更容易。考虑以下示例:
public class CreateNewWidgetAction extends ActionSupport {
private String property1;
private String property2;
private Long property3;
...
public String execute() throws Exception {
Widget widget = new Widget();
// set properties on widget
}
// getters and setters for properties here
}
public class CreateNewWidgetAction extends ActionSupport {
private Widget widget;
public String execute() throws Exception {
// sub properties for widget were already set, less work to do here
}
// getter and setter for widget here (or the
// getModel method if you are using the Model Driven approach)
}在第二个示例中,我们直接在小部件上设置属性(假设小部件有property1、property2和property3)。
希望您能在处理大量属性的示例中看到这将如何简化您的代码。
更新:如果您选择实现ModelDriven,那么您将在表单中引用上面的属性,如property1、property2、property3等。此外,由于您的操作是由单个模型驱动的,因此所有表单参数都被视为该模型的子级。
如果您选择不实现ModelDriven,那么您可以在表单中引用上面的属性,如widget.property1、widget.property2、widget.property3等。这种方法的好处是,您可以在操作上拥有与小部件上的属性不对应的其他属性。
除此之外,没有什么不同。事实上,这本书甚至说了这么多:
与对象支持的JavaBeans属性一样,ModelDriven操作也允许我们使用复杂的
对象来接收数据。这两种方法之间的差异很小,选择其中一种方法不会产生任何功能上的后果。
详细说明: Struts 2 in Action,第3章。使用Struts 2 actions > Transferring Pg -Pg。62
发布于 2010-11-23 19:57:22
如果你有嵌套属性,那么模型驱动会更好,例如,如果你有user bean,它在jsp端有name属性den,你必须做一些像user.name这样的事情,这样OGNL才能发现你指向的是用户对象,并且在那个name属性里面。
在模型驱动接口的情况下,当一个操作的请求到来时,该接口将把bean对象放在值堆栈的顶部,因为该bean位于值堆栈的顶部,所以您不需要在jsp中执行类似user.name的操作。
我希望它能回答你的问题
https://stackoverflow.com/questions/4214368
复制相似问题