Struts2之ModelDriven用法

来源:互联网 发布:如何导出股票数据 编辑:程序博客网 时间:2024/06/06 11:37

我们在使用Struts2时,服务器端接收客户端数据方式有很多种,我们推荐使用Action类实现ModelDriven接口的方式,因为它有很多便利之处!


我们可以根据Action属性的不同将它分为两类:Field-Driven(属性驱动)和Model-Driven(模型驱动)Action。 

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

二、实现了modelDriven接口可以在action中直接获得例如User对象,它会将Object GetModel()取得的User放到ValueStack中。可以理解为将这个User的属性追加到Action中。它主要是作用是实现类似Struts的FormBean功能。 

在struts2中,提供了一种直接使用领域对象的方式,就是让action实现com.opensymphony.xwork2.ModelDriven接口,ModelDriven让你可以直接操作应用程序中的领域对象,允许你在视图层和业务层使用相同的对象。

 

ModelDriven接口只有一个方法 :

public  Object  getModel(){ 
return null; 

该方法返回一个用于接收用户输入数据的对象模型,在这个模型对象中的属性可以直接通过(属性名)username来访问,而不需要使用(对象名.属性名)user.username这种格式来访问了,在action也不需要对对象提供getter和setter方法了,但是必须要在action中对模型实例化(new)。


视图层代码:

1、上传表单数据(请求)

<form action="LoginAction.action" method="post">    用户名:<input type="text" name="username">    密 码:<input type="password" name="password">    <br>    爱好1:<input type="text" name="hobbyList[0]">     爱好2:<input type="text" name="hobbyList[1]">    <br>    <input type="submit" value="登录">    </form>

2、数据处理后输出(响应)

 <body>    <h2>登陆成功!</h2> <hr>       <h4>欢迎您${user.username}!</h4><br>    <h4>您的爱好是1、${user.hobbyList[0]}2、${user.hobbyList[1]}</h4>  </body>

Model代码:

public class User {private String username;private String password;private List<String> hobbyList;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public List<String> getHobbyList() {return hobbyList;}public void setHobbyList(List<String> hobbyList) {this.hobbyList = hobbyList;}}

Action代码:(处理数据)

public class LoginAction extends ActionSupport implements ModelDriven<User>{/** *  */private static final long serialVersionUID = 1L;//此处必须实例化private User user = new User();public String login(){//调用ServletActionContext的方法获得servlet APIHttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("user", user);System.out.println("调用action!" + "\n参数传递:姓名:" + user.getUsername() + "爱好:" + user.getHobbyList().get(0) + user.getHobbyList().get(1));return SUCCESS;}//实现接口中的方法,返回在开始处实例化的Model对象public User getModel() {// TODO Auto-generated method stubreturn user;}}




1 0