最近在学SSH框架,实战项目,用到了Struts2的ModelDriven<>接口,在这做一点记录

  ModelDriven,意为模型驱动,意思是直接把实体类当成页面数据的收集对象

  参考他人的博客和自己的实践,在这有一点笔记

  以User,userAction,JSP页面为例,具体例子抄的他人博客,自己第一次接触博客不会弄格式

  实体类User例子如下:

public class User {

    private int id;

    private String username;

    private String password;

    private int age;

    private String address;

    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 int getAge() {

       return age;

    }

    public void setAge(int age) {

       this.age = age;

    }

    public String getAddress() {

       return address;

    }

    public void setAddress(String address) {

       this.address = address;

    }

    public int getId() {

       return id;

    }

    public void setId(int id) {

       this.id = id;

    }

}

 下面是JSP页面的部分代码

  

<form action="test/user.action" method="post">

        <input type="hidden" name="method:add">

        username:<input type="text" name="username"> <br/>

        password:<input type="text" name="password"> <br/>

        age:<input type="text" name="age"> <br/>

        <input type="submit" name="submit" value="添加用户">

     </form> <br/>

  最后是Action的代码,引用了ModelDriven这个接口,实现getModel()方法


public class UserAction implements ModelDriven{

    private User user;

    @Override

    public Object getModel() {

       if(user == null){

           user = new User();

       }

       return user;

    }

    public String add(){

       new UserManager().addUser(user);

       return "success";

    }

    public User getUser() {

       return user;

    }

    public void setUser(User user) {

       this.user = user;

    }

}

  最后是ModelDriven这个接口的背后机制,即ValueStack,值栈,

界面通过form的name属性即可直接赋值给user对象,说明user对象正是ValueStack中的一个root对象

  为什么ser对象会在ValueStack中呢?它是什么时候被压入ValueStack的呢?

  ModelDrivenInterceptor(Interceptor,拦截器)。ModelDrivenInterceptor是缺省的拦截器链的一部分,当一个请求经过ModelDrivenInterceptor的时候,在这个拦截器中,会判断当前要调用的Action对象是否实现了ModelDriven接口,如果实现了这个接口,则调用getModel()方法,并把返回值(本例是返回user对象)压入ValueStack。

  

  

接触Struts2的ModelDriven<>接口的更多相关文章

  1. Struts2中的ModelDriven接口

    若没有实现ModelDriven的接口,Controll的代码会比较冗余,不能实现Controll和Model代码的分离 下面是没有实现ModelDriven接口的SuggestAction pack ...

  2. struts2重点——ModelDriven

    一.属性驱动 在目标 Action 类中,通过 setXxx() 方法来接收请求参数. 二.模型驱动 1.ParametersInterceptor 拦截器工作原理 ParametersInterce ...

  3. 关于struts2的modelDriven

    今天做毕业设计,前台往后台赋值,习惯性的用了modelDriven.但是刚写完就奇怪它的机理是怎样的,它怎么知道我前台传的参是哪个Model的属性(之前用servlet都是手动),于是手贱的ctrl点 ...

  4. Struts2中ModelDriven的使用

    它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动 (ModelDriven)需要让Action实现com.opensymphony.xwork2.ModelDriven 接口, ...

  5. Struts2 之 modelDriven & prepare 拦截器详解

    struts2 ModelDriven & Prepareable 拦截器 前面对于 Struts2 的开发环境的搭建.配置文件以及 Struts2 的值栈都已经进行过叙述了!这次博文我们讲解 ...

  6. struts2之ModelDriven的用法

    在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口.ModelDriven让你可以直接操作应 ...

  7. Struts2之ModelDriven的使用

    http://www.cnblogs.com/luoyanli/archive/2012/11/20/2778361.html 我们可以根据Action属性的不同将它分为两类:Field-Driven ...

  8. struts2之ModelDriven

    在Struts 2中,提供了另外一种直接使用领域对象的方式,就是让action实现com.opensymphony. xwork2.ModelDriven接口.ModelDriven让你可以直接操作应 ...

  9. Struts2 的ModelDriven理解

    以UserAction为例,当UserAction实现了ModelDriven接口之后,与该接口相关的默认配置的拦截器会在拦截请求之后判断该请求是将要被UserAction处理而且UserAction ...

随机推荐

  1. sku回忆笔记

    分类表:(商品分类编号, 分类名称, 父分类编号)(1, 男装, 0)(2, 裤子, 1)(3, 外套, 1)(4, 内裤, 1)(5, 袜子, 1) 商品表:(商品编号, 商品名称, 商品分类编号, ...

  2. day1 计算机组成、操作系统

    一:编程与编程的目的 1.什么是语言?什么是编程语言? 语言是一个事物与另一个事物沟通的介质. 编程语言是程序员与计算机沟通的介质. 2.什么是编程?为什么要编程? 编程是程序员将自己想要让计算机做的 ...

  3. pytorch torchvision.ImageFolder的使用

    参考:https://pytorch-cn.readthedocs.io/zh/latest/torchvision/torchvision-datasets/ torchvision.dataset ...

  4. P2257 YY的GCD--洛谷luogu

    传送门 题目描述 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻×必然不 ...

  5. web 项目:解决插入 MySQL 数据库时中文乱码问题

    背景:在做 javaweb 项目的时,前台传递的中文最后插入数据库的时候总是出现乱码现象. 解决方案 ​ A.不管是使用 Idea.eclipse,确定自己的项目所使用的字符集是 UTF-8. ​ B ...

  6. 百度地图JSAPI浏览器定位

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=你的秘钥 ...

  7. Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch【Finchley 版】

    随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑:一个请求可能需要多个服务的调用:当请求迟缓或不可用时,无法得知是哪个微服务引起的,这 ...

  8. Angular下载文件

    public Down(path: string) { return this.http.get(path, { responseType: "blob" }).subscribe ...

  9. python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools

    问题描述 当前环境win10,python_3.6.1,64位. 在windows下,在dos中运行pip install Scrapy报错: building 'twisted.test.raise ...

  10. js tool 方法之删除数组指定项

    最近又开始写博文了,还是在自己的本地项目上做一些小的方法案例. 之前撸代码的时候总是遇到删除数组里某个元素的问题,JS没提供便捷的方法,只能自己写个循环处理,所幸自己写个方法,以后博客项目里要用到就不 ...