Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Struts2 为什么模型驱动的操作优先于对象支持的bean属性_Struts2 - Fatal编程技术网

Struts2 为什么模型驱动的操作优先于对象支持的bean属性

Struts2 为什么模型驱动的操作优先于对象支持的bean属性,struts2,Struts2,我正在从struts-2中学习struts2。他们说,为了将数据传输到对象上,模型驱动的操作比对象支持的bean属性更可取 有人能解释一下他们为什么这么说吗 原因是否与需要在视图层中提及引用名称有关?在处理多个属性的情况下,本书主张使用一个对象来保存这些属性,而不是将它们直接放在操作上,以使事情更简单。考虑下面的例子: public class CreateNewWidgetAction extends ActionSupport { private String property1;

我正在从struts-2中学习struts2。他们说,为了将数据传输到对象上,模型驱动的操作比对象支持的bean属性更可取

有人能解释一下他们为什么这么说吗


原因是否与需要在视图层中提及引用名称有关?在处理多个属性的情况下,本书主张使用一个对象来保存这些属性,而不是将它们直接放在操作上,以使事情更简单。考虑下面的例子:

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操作也允许我们使用复杂的Java对象来接收数据。这两种方法之间的差异很小,选择其中一种方法不会产生功能性后果

-Struts 2的作用,第3章。使用Struts 2操作>将数据传输到对象上-第62页


在处理多个属性的情况下,本书主张使用一个对象来保存这些属性,而不是将它们直接放在动作上,以使事情变得更简单。考虑下面的例子:

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操作也允许我们使用复杂的Java对象来接收数据。这两种方法之间的差异很小,选择其中一种方法不会产生功能性后果

-Struts 2的作用,第3章。使用Struts 2操作>将数据传输到对象上-第62页


如果您具有嵌套属性,那么模型驱动更好 例如,如果您有user bean,并且它在jsp端有name属性den,那么您必须执行类似user.name的操作,以便OGNL可以发现您正在指向user对象并在该name属性内

对于模型驱动接口,当请求操作时,该接口将把bean对象放在值堆栈的顶部,因为该bean位于值堆栈的顶部,所以您不需要在jsp中执行类似user.name的操作


我希望它能回答您的问题

关于是否有嵌套属性,模型驱动更好 例如,如果您有user bean,并且它在jsp端有name属性den,那么您必须执行类似user.name的操作,以便OGNL可以发现您正在指向user对象并在该name属性内

对于模型驱动接口,当请求操作时,该接口将把bean对象放在值堆栈的顶部,因为该bean位于值堆栈的顶部,所以您不需要在jsp中执行类似user.name的操作


我希望它能回答你的问题

我了解它的好处。我的问题是,模型驱动的操作如何比对象支持的bean(它们都用于在对象中保存数据)更好。它们并不更好。只是另一种选择。我已经更新了我的答案来反映这一点。我理解其中的好处。我的问题是,模型驱动的操作如何比对象支持的bean(它们都用于在对象中保存数据)更好。它们并不更好。只是另一种选择。我更新了我的答案以反映这一点。