Struts2的CRUD操作
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操作的更多相关文章
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2的crud
struts2的crud引出的问题: 1.当Action里面有其他类的实例引用属性时,当要用请求参数为该对象的属性赋值时,如何将其压入栈顶. 2.当有的操作(list)不需要创建该属性的实例对象时,或 ...
- HibernateTemplate实现CRUD操作
---------------------siwuxie095 HibernateTemplate 实现 CRUD 操作 1.在 SSH 框架中使用 HibernateTemplate 模板类实现 C ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- ASP.NET Core Web API Cassandra CRUD 操作
在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...
- MongoDB的CRUD操作
1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...
随机推荐
- 架构设计--用户端全http参数接口详细说明v1
1. 用户端全http参数接口详细说明v1.doc 1 2. change histor 1 3. 接口通用参数说明 1 4. 函数注册接口(规划中) 3 5. 用户权限模块 3 5.1. 用户注册接 ...
- atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结
atitit.商业版 源码保护 与 java本地原生代码转换 的方案总结 1. 为什么虚拟机语言容易被反编译 1 2. 源码泄露的问题问题 1 3. Excelsior JET 1 4. gcj.的流 ...
- ThreadPoolExecutor线程池解析与BlockingQueue的三种实现
目的 主要介绍ThreadPoolExecutor的用法,和较浅显的认识,场景的使用方案等等,比较忙碌,如果有错误还请大家指出 ThreadPoolExecutor介绍 ThreadPoolExecu ...
- 关于mysqli_free_result($result)报错
运行原来的一个原生的php写的项目,出现mysqli_free_result($result)的警告 Warning: mysqli_free_result() expects parameter 1 ...
- Delphi之Raise抛出异常
相关资料: http://blog.csdn.net/a20071426/article/details/10160171 实例代码: unit Unit1; interface uses Windo ...
- 突破MIME限制上传
方法:找一个正常的可上传的查看其的MIME类型,然后将马子的MIME改成合法的MIME即可.
- 去除inline-block元素间间距的N种方法<转>
一.现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,很简单的个例子: <input /> <input type="su ...
- gpio 灯的对应关系
1 点灯验证通过: GPIO160 TX1-LED GPIO161 RX1-LED GPIO163 TX2-LED GPIO164 RX2-LED GPIO ...
- PLSQL 连接不上64位ORACLE数据库解决办法
http://it.oyksoft.com/post/6003/ huan jing bian liang TNS_ADMIN D:\OracleClient D:\OracleClient\TNS ...
- QQ会员活动运营平台架构设计实践——高效自动化运营
QQ会员活动运营平台(AMS),是QQ会员增值运营业务的重要载体之一,承担海量活动运营的Web系统.在过去四年的时间里,AMS日请求量从200-500万的阶段,一直增长到日请求3-5亿,最高CGI日请 ...