Struts2-Modeldriven接口用法

来源:互联网 发布:自然语言处理余弦算法 编辑:程序博客网 时间:2024/05/21 10:49

struts2中的Action根据其属性的不同可以分为两类:Filed-Driven Action(属性驱动)和Model-Driven Action(模型驱动).

<1>Field-Driven(属性驱动)Action,Action拥有自己的属性,这些属性一般是Java的基本类型。表单字段直接和Action的属性对应.

<2>Model-Driven Action(模型驱动),在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在web层和业务层使用相同的对象.

ModelDriven接口只有一个方法 public Object getModel() { return null; } 该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)来访问,而不需要使用(对象名.属性名)这种格式来访问了,在action里也不需要对对象提供getter和setter方法了,但是必须要在action中进行new操作.


具体代码如下:

public class UserAction extends ActionSupport implements ModelDriven<User> {

private User user=new User();public User getModel() {    return user;}private UserService userService;public void setUserService(UserService userService) {    this.userService = userService;}/** * 注册功能 * @return */public String regist(){    //接收请求参数    userService.save(user);    return LOGIN;}

Filed-Driven Action和Model-Driven Action的区别:

(1)模型驱动的Action必须实现ModelDriven接口,而且要提供相应的泛型

(2)实现ModelDriven的getModel方法,其实就是简单的返回泛型的一个对象

(3)在Action提供一个泛型的私有对象,就是定义一个对象,并提供相应的getter与setter。


到底是用属性驱动和是模型驱动呢?

(1)请统一整个系统中的Action使用的驱动模型,即要么都是用属性驱动,要么都是用模型驱动。

(2)如果你的DB中的持久层的对象与表单中的属性都是一一对应的话,建议使用模型驱动,这样看起来代码会整洁.

(3)如果表单的属性不是一一对应的话,那么就应该使用属性驱动,否则,系统就必须提供两个Bean,一个对应表单提交的数据,另一个用与持久层。