Struts之CRUD

1何为CRUD:CRUD代表的是一个框架的Create(增),Read(读取),update(更新),Delete(删除)

2怎么做呢??

其实Struts2的CRUD与现实的方法一样,只是在属性的设置和获取上更方便了,因为了值栈吖,有了OGNL对象表达式,所以Struts2的CRUD显为更加方便

废话不多说了,下面就来个分析吧!!(与数据库连接部分就用data来代替)

Create------>增:添加数据,保存数据到数据库

肯定就是获得一个保存的对象吧,但是提交的Action类和对象类不是同一个OGNL匹配的不是我这个Action类,那我怎么获得提交的对象呢?惯性思想肯定是从值栈里拿吧,但是这样做好麻烦吖,从值栈拿出来,还要一个一个的赋值,或者是在Action类里写相同属性的Set方法(),麻烦吖,所以Struts2又提供了更简便的方法是实现ModelDriven的接口----------该接口就是用来把所需的对象压入栈顶

正式流程:

1表单提交数据

2在Action类中实现ModelDriven接口 ,并实现getModel()方法,并把自己所需的对象压入栈顶,也就是return回去那个对象

3在getModel方法的作用就是把对象压入值栈的栈顶

4然后paparmeterInterceptor拦截器(默认会调用此拦截器的,),该拦截器就是把请求里的参数与值栈对象的一一匹配,这样我们的对象就从栈顶里拿下来了,然后根据相应的办法放入数据库

代码如下:

表单提交数据:

<s:form action="emp-save">
<s:textfield name="firstName" label="FirstName"></s:textfield>
<s:textfield name="lastName" label="LastName"></s:textfield>
<s:textfield name="email" label="Email"></s:textfield>
<s:submit></s:submit>
</s:form>

  

Action类处理请求:

public class EmployeeAction implements ModelDriven<Employee> {
private Employee employee;

public String save(){
dao.save(employee);
return "success";
}

public Employee getModel() {

this.employee=new employee()
return employee;
}

}

data类----模拟的数据库

public class Dao {

private static Map<Integer, Employee> emps = new LinkedHashMap<Integer, Employee>();

static{//模拟数据库
emps.put(1001, new Employee(1001, "AA", "aa", "aa@atguigu.com"));
emps.put(1002, new Employee(1002, "BB", "bb", "bb@atguigu.com"));
emps.put(1003, new Employee(1003, "CC", "cc", "cc@atguigu.com"));
emps.put(1004, new Employee(1004, "DD", "dd", "dd@atguigu.com"));
emps.put(1005, new Employee(1005, "EE", "ee", "ee@atguigu.com"));
} /*
*用来遍历的 * */ public List<Employee> getEmployees(){
return new ArrayList<Employee>(emps.values());
} /* *用来删除 * */ public void delete(Integer empId){
emps.remove(empId);
}
/* *用来保存 * */ public void save(Employee emp){
long time = System.currentTimeMillis();//用来产生ID的
emp.setEmployeeId((int)time); /* *根据ID获取数据的 * */ public Employee get(Integer empId){
return emps.get(empId);
}

流程分析:

form表单提交,发送请求道Action类的save方法,大家都知道Action请求的走的流程吧,Action在执行save方法后会不断的回调各种拦截器,其中就有一个modelDriven吧,这个拦截器的作用就是把自己所需的对象压入栈顶,因为压入栈顶后paparmeterInterceptor拦截器(默认会调用此拦截器的,),该拦截器就是把请求里的参数与值栈对象的一一匹配,这样我们的对象的属性就被一一匹配了吧,就从栈顶里拿下来了,然后根据dao的save方法放入数据库吧,整个流程就是这样

form提交---->Action类的Action方法------>因为实现了ModelDriven接口(下一遍我会把这个源代码分析上来)----->所以会调用getModel()方法,这个方法作用就是把我们所需的对象压入栈顶-->paparmeterInterceptor拦截器进行匹配------>表单提交的数据被匹配到我们的对象中,那我们就可以根据相应的方法放入数据库吖

Struts2的CRUD操作的更多相关文章

  1. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. Struts2的crud

    struts2的crud引出的问题: 1.当Action里面有其他类的实例引用属性时,当要用请求参数为该对象的属性赋值时,如何将其压入栈顶. 2.当有的操作(list)不需要创建该属性的实例对象时,或 ...

  3. HibernateTemplate实现CRUD操作

    ---------------------siwuxie095 HibernateTemplate 实现 CRUD 操作 1.在 SSH 框架中使用 HibernateTemplate 模板类实现 C ...

  4. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  5. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  6. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  7. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

  8. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  9. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

随机推荐

  1. 以byte方式讀取SPD的數據(SMBus Controller在PCH中)

    Reading A Byte of SMBus EEPROM DataThe following steps have to be followed for the System BIOS to re ...

  2. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  3. Nginx、PCRE和中文URL(UTF8编码)rewrite路径重写匹配问题

    最近遇到了使用Nginx 重写中文UTF8编码路径的问题. 才发现默认情况下Nginx的rewrite是不支持UTF8匹配的. 比如: rewrite ^/(..)$ /2个字符文章.html bre ...

  4. 【C语言】18-变量类型

    一.变量的作用域 C语言根据变量作用域的不同,将变量分为局部变量和全局变量. 1.局部变量 1> 定义:在函数内部定义的变量,称为局部变量.形式参数也属于局部变量. 2> 作用域:局部变量 ...

  5. Nokia Imaging SDK

    Nokia Imaging SDK 目前为 beta 版本,是诺基亚在自己的图像应用中使用的技术同时提供给开发者 使用.这是一个运行在手机设备上处理图片数据的高效的类库.功能包括 JEPG 图片的编码 ...

  6. Python字符与ASCII码转换

    有两个内置函数,记得以前在<Python Cookbook>里看到过. >>>print ord('a') 97 >>>print chr(97) a

  7. EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接

    EAGAIN.EWOULDBLOCK.EINTR与非阻塞 长连接 EWOULDBLOCK用于非阻塞模式,不需要重新读或者写 EINTR指操作被中断唤醒,需要重新读/写 在Linux环境下开发经常会碰到 ...

  8. MDI多文档窗体--在一个窗体中装载多个窗体

    创建MDI窗体之前,首先要明确两个概念:父窗体和子窗体,在MDI窗体中,起到容器作用的窗体被称为“父窗体”, 可放在父窗体中的其他窗体被称为子窗体,也成为MDI子窗体.当应用程序启动时,首先会显示父窗 ...

  9. Office Web App2013 在线查看PDF文件

    经常会有客户问,在SharePoint中,如何在浏览器中查看与编辑文档,通常给出的解决方案是集成Office Web App. 而在实际应用过程中,客户通常会要求实现PDF文件在线查看,对于PDF文件 ...

  10. Flowplayer-一款免费的WEB视频播放器(转)

    Flowplayer 是一个开源(GPL 3的)WEB视频播放器.您可以将该播放器嵌入您的网页中,如果您是开发人员,您还可以自由定制和配置播放器相关参数以达到您要的播放效果.本文主要介绍Flowpla ...