博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(九)模型驱动和属性驱动
阅读量:6270 次
发布时间:2019-06-22

本文共 5897 字,大约阅读时间需要 19 分钟。

出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动,

所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程。

所谓属性驱动,就是使用属性来作为贯穿MVC流程的信息携带者,当然属性必须依附于对象,

这个对象就是Action实例。 简单说,模型驱动就是使用单独的javaBean封装请求参数。 属性驱动就是把属性写在Action类中。

 

我们发现上一章的jsp中的name必须前面得加 user.username。。太过麻烦。我们使用模型驱动来解决这个问题。实际开发中使用这种方式

一、模型驱动的要求

1.动作类实现ModelDriven接口

2.实现接口中的getModel方法,返回我们的数据对象。(实现中用泛型将确定传入模型 implements ModelDriven<?>

3.数据模型对象必须由我们实例化。

例子:

public class AdduserAction extends ActionSupport implements ModelDriven
{ //数据模型对象由我们实例化 private User user=new User(); public User getUser() { System.out.println("getuser"); return user; } public void setUser(User user) { System.out.println("setuser"); this.user = user; } public String adduser(){ System.out.println(user.getUsername()+":"+user.getAge()); return null; } //实现接口方法,返回我们的数据模型对象 public User getModel() { // TODO Auto-generated method stub return user; } }

 

 我们在jsp上就能像以前那样 ,name只用我们的参数相同即可 

            
用户名:
年 龄:

  原理:

其实这时候表单的name已经不仅仅是一个简单的字符串了。     这一系列的操作是由ModelDriven和params拦截器帮我们做的 。     params拦截器负责提取请求参数,如果是属性驱动模式,则还负责将请求参数传给Action类的属性     模型驱动的话就只提取请求参数。     ModelDriven拦截器会先判断我们的动作类是否属于ModelDriven类型      属于的话,就调用我们实现的getModel方法,获取我们传入的对象     然后将我们的对象给压入栈中

 

 

 

 

附:struts2注册案例

(1)我们先创建数据库表

create database demo;        use demo;        create table user(            username varchar(100) primary key,            password varchar(100),            birthday date,            hobby varchar(255),            married boolean        );

(2)在domain包创建我们的user实体类  

public class User {            private String username;//用户名            private String password;//密码            private Date birthday; //生日            private String hobby; //爱好            private boolean married; //是否结婚            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 Date getBirthday() {                return birthday;            }            public void setBirthday(Date birthday) {                this.birthday = birthday;            }            public String getHobby() {                return hobby;            }            public void setHobby(String hobby) {                this.hobby = hobby;            }            public boolean isMarried() {                return married;            }            public void setMarried(boolean married) {                this.married = married;            }        }

(3)完成数据层,我们在Dao层处理数据

public class UserDao {            QueryRunner qr=new QueryRunner(JdbcUtils.getDataSource());             //根据名字查找用户            public User findUserByUsername(String username){                try {                    String sql="select * from user where username=?";                    return qr.query(sql, new BeanHandler
(User.class),username); } catch (Exception e) { throw new RuntimeException(e); } } //添加用户 public int addUser(User user){ String sql="insert into user values(?,?,?,?,?)"; Object []params={user.getUsername(),user.getPassword(),user.getBirthday(),user.getHobby(),user.isMarried()}; try { return qr.update(sql,params); } catch (SQLException e) { throw new RuntimeException(e); } } }

(4)完成业务逻辑层的编写,service层  

public class UserService {            private UserDao userdao=new UserDao();             //注册            public int regist(User user){                return userdao.addUser(user);            }            //通过用户名查找用户            public User findByUsername(String username){                return userdao.findUserByUsername(username);            }        }

(5)创建web层,我们创建web层动作类    

public class UserAction extends ActionSupport implements ModelDriven{        private User user=new User();        private UserService userservice=new UserService();          //注册方法        public String regist(){             User _user=userservice.findByUsername(user.getUsername());              //判断用户是否存在,存在返回exists字符串            if(_user!=null){                return "exists";            }             //获取注册成功更新的行数             int count=userservice.regist(user);             //如果>0,返回success             if(count>0){            return SUCCESS;            }            return null;        }        public Object getModel() {            // TODO Auto-generated method stub            return user;        }        public User getUser() {            return user;        }        public void setUser(User user) {            this.user = user;        }    }

(6)我们编写注册的jsp页面

        
用户名:
密 码:
生 日:
爱好:
篮球
足球
写代码
已婚:

(7)配置 struts.xml  

 

/success.jsp
/msg.jsp

  

 

  

  

 

转载于:https://www.cnblogs.com/yuexiaoyun/p/9448178.html

你可能感兴趣的文章
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>
新年第一镖
查看>>
unbtu使用笔记
查看>>
MaxCompute 学习计划(一)
查看>>
OEA 中 WPF 树型表格虚拟化设计方案
查看>>
Android程序开发初级教程(一) 开始 Hello Android
查看>>
使用Gradle打RPM包
查看>>