Struts2的ModelDriven

现在公司也是在用Struts2,so下班在家趁有空的时间研究了一下子。我们在使用struts2的时候,在action里经常要定义一下属性(并生成getter/setter方法),而且这些属性还是我们定义在model类里边的,当然也还有一些属性在实体类中没有定义的。在很多时候可能前台传来的字段不是很多,我们一个一个的写的话也没什么影响,也就几下子就完活了,但是在很多的时候,前台传来的属性也不止几个,可能有十几个或者更多。这个时候我们实现com.opensymphony.xwork2.ModelDriven这个借口的就很方便了,这个接口只有一个方法getMOdel().只要实现了这个这个方法,就可以剩下我们很多事了。下面是我自己做的一个例子,写的很简单,但是道理都一样。

前段jsp页面:

<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
   <form action="user/user_add.do" method="post">

      <input type="text" name="name" id="name" placeholder="请输入姓名" /> 
      <input type="text" name="age" id="age" placeholder="请输入年龄" /> 
      <input type="submit" value="test" />
   </form>
</body>
</html>
javaBean:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class User {
   private int id;
   private String name;
   private int age;

   @Id
   @GeneratedValue
   public int getId() {
      return id;
   }

   public void setId(int id) {
      this.id = id;
   }

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }

   public int getAge() {
      return age;
   }

   public void setAge(int age) {
      this.age = age;
   }
   

}
Useraction类:

import javax.annotation.Resource;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;

import com.cgl.model.User;
import com.cgl.service.IUserService;

@Controller
public class UserAction implements ModelDriven<User> {
    private User user=new User();//光声明的话页面的值是传不进来的
    private IUserService userService;
    private static final Logger logger = Logger.getLogger(UserAction.class);


    public String add() {
        logger.info("action 执行");
        userService.add(user);
        return "add";
    }


    @Resource
    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return user;
    }
}
结果:这是我在debug里查看到的值。
	
在做这个例子的时候,大家可以看到UserAction中注释的地方,一开始我没有new,只是声明了,造成怎么也获取不到前端的值,也是很纳闷,后来看了看官方的文档.它给出的实例是这样的:

public class ModelDrivenAction implements ModelDriven {
     public String execute() throws Exception {
         return SUCCESS;
     }
 
     public Object getModel() {
         return new Gangster();
     }
}

可以看出它是直接return 一个new的对象,并且并没有声明。但是也根据这个做了实验,证明确实是可行的。下边上图

UserAction:

import javax.annotation.Resource;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;

import com.cgl.model.User;
import com.cgl.service.IUserService;

@Controller
public class UserAction implements ModelDriven<User> {
//    private User user=new User();//光声明的话页面的值是传不进来的
    private IUserService userService;
    private static final Logger logger = Logger.getLogger(UserAction.class);


    public String add() {
        logger.info("action 执行");
        userService.add(getModel());
        return "add";
    }


    @Resource
    public void setUserService(IUserService userService) {
        this.userService = userService;
    }

    public User getModel() {
        return new User();
    }
}
	结果如图:
		
	结果是一样的,完全都可以取到,不过我个人比较喜欢第一种方式。初次写技术相关的,希望能给大家带来点作用。
 
	

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值