最近在学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. 重建UNDO表空间遭遇ORA-01548

    今天开发那边的一套数据库的undo表空间不知道被谁设置成了自动扩展,然后所谓的屋漏偏逢连夜雨的是, 开发人员今天跑了一个很大的事物,然后直接后果就是undo表空间不断被扩展,直到把文件系统写爆了.没办 ...

  2. The first day in cnblogs

    2018.12.16,学习OI的第4个月零20天,我在博客园开通了属于自己的博客.

  3. 【原创】研发应该懂的binlog知识(上)

    引言 为什么写这篇文章? 大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了.水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的 ...

  4. 面试 5:手写 Java 的 pow() 实现

    我们在处理一道编程面试题的时候,通常除了注意代码规范以外,千万要记得自己心中模拟一个单元测试.主要通过三方面来处理. 功能性测试 边界值测试 负面性测试 不管如何,一定要保证自己代码考虑的全面,而不要 ...

  5. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  6. 美橙互联SSL 部署到IIS 7以上

    前言:立秋已至,汗流浃背,感觉夏天正到最热的时候...广州某一“著名”大厦 老板:穆德(我),现在要开发个微信小程序.开搞吧. 我:纳尼?好吧.需要购买SSL证书(⊙o⊙)? 老板:神马鬼,有没有免费 ...

  7. C#里面滥用String造成的性能问题

    前两天给我们的json写一个解析函数, 之前用的正宗的json parser, 支持完整的json特性. 但是实际上我们用到特性, 只有key-value的映射, value的类型只有数字和字符串两种 ...

  8. Django 多表查询练习题 Q查询 F查询 聚合 分组

    -------------------------------------------------自己偷的懒,或许用加倍时间也补不回来,珍惜现在的拥有的时光,把我现在! 上节回顾 基于对象的跨表查询( ...

  9. Makefile有三个非常有用的变量。分别是$@,$^,$

    原文地址:https://blog.csdn.net/u013774102/article/details/79043559 假设我们有下面这样的一个程序,源代码如下: /* main.c */ #i ...

  10. Centos7修改系统时区

    timedatectl status Local time: 四 2014-12-25 10:52:10 CST Universal time: 四 2014-12-25 02:52:10 UTC R ...