Struts2增删改查(自己思路理解)

1:查询所有:

DAO层:把所有的信息都放到list集合中。然后返回。

public List<Employee> getEmployees(){
        return new ArrayList<Employee>(emps.values());
    }

Action层:把所有的数据放到request的Map中。然后页面显示的时候。取request中的值

private Map<String, Object> request;

    public void setRequest(Map<String, Object> arg0) {
        this.request = arg0;
    }
    public String list(){
        request.put("emps", dao.getEmployees());
        return "list";
    }

页面获取:  #request.emps

<body>
    <table cellpadding="10" cellspacing="0" border="1">
        <thead>
            <tr>
                <td>ID</td>
                <td>FirstName</td>
                <td>LastName</td>
                <td>Email</td>
                <td>Edit</td>
                <td>Delete</td>
            </tr>
        </thead>

        <tbody>
            <s:iterator value="#request.emps">
                <tr>
                    <td>${employeeId }</td>
                    <td>${firstName }</td>
                    <td>${lastName }</td>
                    <td>${email }</td>
                    <td><a href="emp-edit?employeeId=${employeeId }">Edit</a></td>
                    <td><a href="emp-delete?employeeId=${employeeId }">Delete</a></td>
                </tr>
            </s:iterator>
        </tbody>
        <a href="emp-save.jsp">添加一个</a>
    </table>

    <s:debug></s:debug>
  </body>

2:删除一个

DAO:点击删除的时候得到ID。然后作为参数传入。然后删除整个Employee对象。

public Employee delete(Integer empId){
        return emps.remove(empId);
    }

Action:

利用ModelDrivenInterceptor拦截器和ModelDriven 接口把值压入到栈顶

    用getModel方法创建一个employee对象。然后压入到栈顶。

利用使用 PrepareInterceptor拦截器 和 Preparable 接口

执行 ParametersInterceptor 的 intercept 方法: 把请求参数的值赋给栈顶对象对应的属性. 若栈顶对象没有对应的属性, 则查询
值栈中下一个对象对应的属性....

prepare() 主要作用:为getModel()方法准备model的。

5). 存在的问题:

getModel 方法

public Employee getModel() {
    if(employeeId == null)
        employee = new Employee();
    else
        employee = dao.get(employeeId);
    
    return employee;
}

I.   在执行删除的时候, employeeId 不为 null, 但 getModel 方法却从数据库加载了一个对象. 不该加载!
II.  指向查询全部信息时, 也 new Employee() 对象. 浪费!

6). 解决方案: 使用 PrepareInterceptor 和 Preparable 接口.

7). 关于 PrepareInterceptor

[分析后得到的结论]
 
若 Action 实现了 Preparable 接口, 则 Struts 将尝试执行 prepare[ActionMethodName] 方法,
若 prepare[ActionMethodName] 不存在, 则将尝试执行 prepareDo[ActionMethodName] 方法.
若都不存在, 就都不执行.

若 PrepareInterceptor  的 alwaysInvokePrepare 属性为 false,
则 Struts2 将不会调用实现了 Preparable 接口的  Action 的 prepare() 方法

public Employee getModel() {
        employee=new Employee();
        return employee;
    }
private Integer employeeId;
    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }
public String delete(){
        dao.delete(employeeId);
        return "success";
    }
public void prepare() throws Exception {
        System.out.println("prepare...");
    }

3:添加一个:

DAO:保存一个employee对象

public void save(Employee employee){
        long time=System.currentTimeMillis();
        employee.setEmployeeId((int)time);
        emps.put(employee.getEmployeeId(), employee);
    }

Action:

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

    public void prepareSave(){
        employee = new Employee();
    }

4:修改  得到修改的ID。然后回显本来显示的数据(利用ModelDriven把在栈顶的employee对象显示出来)。然后再重新添加一个Employee对象。

在页面上隐藏ID:

<s:hidden name="employeeId"></s:hidden>

DAO:得到一个ID。

public Employee get(Integer empId){
        return emps.get(empId);
    }

    public void update(Employee emp){
        emps.put(emp.getEmployeeId(), emp);
    }

Action:

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

    public void prepareUpdate(){
        employee = new Employee();
    }

    public String edit(){
        return "edit";
    }
时间: 2024-08-09 20:33:41

Struts2增删改查(自己思路理解)的相关文章

富文本内容简单的的增删改查

由于html本身的textarea标签的文本编辑功能较为简单,不能设置文字的样式,因此需要富文本控件来增强textarea的功能.       一些常见的富文本控件有:UEditor.kindeditor.simditor.bootstrap-wysiwyg.wangEditor.CKEditor.tinymce,各有优缺点,网上也有对不介绍,不再赘述. 此处选用tinymce,因其兼容性较好,插入页面也较为简单,此外还有丰富的插件可以扩展功能. 首先,在页面上使用tinymce:1.引入js文

Oracle网络公开课《蛋炒饭,最简单也最困难——我理解的Oracle增删改查与你不同》

2014年4月18日是<舌尖2>开播的日子(正好是这次网络课的三个月前),吃货们早早准备,连某冰冰也发了这样的微博:"据说今儿晚上不吃饱不能打开电视机,重大杀器<舌尖上的中国>正在出没.嘿嘿,我已经准备好充足的零食,麻溜地坐电视机前了,你呢?" 本节课主要谈和吃有关的话题. 本课主要通过回顾两部电影和纪录片--<食神>和<舌尖上的中国2>,来谈谈如何对百万行以上数据进行增删改查的操作,这些操作和本课的标题一样--蛋炒饭,最简单也最困难,是

Struts2+Hibernate+Spring框架实现增删改查

一.添加3个框架的JAR包,完成后写配置文件: 1.web配置文件: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation=&quo

网络公开课_我理解的Oracle增删改查与你不同

您好, Beijing Shennao 邀请您出席使用 WebEx 的网络研讨会. 主题:网络公开课_我理解的Oracle增删改查与你不同 主持人:Beijing Shennao 日期与时间: 2014年7月18日 19:30, 中国时间(北京,GMT+08:00) 活动密码:321321 ------------------------------------------------------- 要加入该在线活动 ---------------------------------------

yii2增删改查及AR的理解

yii2增删改查 // 返回 id 为 1 的客户 $customer = Customer::findOne(1); // 返回 id 为 1 且状态为 *active* 的客户 $customer = Customer::findOne([ 'id' => 1, 'status' => Customer::STATUS_ACTIVE, ]); // 返回id为1.2.3的一组客户 $customers = Customer::findAll([1, 2, 3]); // 返回所有状态为 &

Hibernate基于Maven和Struts2搭建的增删改查

注:要全套流程截图操作的自行在我博客下载 一.建立一个maven多模块项目 二.把各个模块依赖起来,导入相应jar包 三.选中entity模块,右键Add Framework Support,找到hibernate确认 四 .配置一个数据库 五.建立并配置hibernate.cfg.xml信息 六.用hibernate创建实体对象 七.在util模块编写hibernateUtil类,在dao模块调用Util和实体创建增删改查的方法,在service模块实现相关业务 八.右键web模块,Add F

Struts2+Spring+Hibernate实现员工管理增删改查功能(一)之ssh框架整合

前言        转载请标明出处:http://www.cnblogs.com/smfx1314/p/7795837.html 本项目是我写的一个练习,目的是回顾ssh框架的整合以及使用.项目介绍:此项目主要有前台管理员通过登录进入员工管理系统页面,之后可以对员工列表进行常规的增删改查.以及部门列表的增删改查.IDE使用的是eclipse,个人感觉比较好用,不过最近我正在研究idea,数据库是mysql,前台主要以bootstrap为主. 这点是直接摘抄的 struts 控制用的 hibern

MySQL初步理解,简易单表增删改查

什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt .xml.... 优点:数据存储在磁盘上,数据可以实现持久化存储 缺点:数据操作时,算法必须自己实现,但是相当一部分算法实现重复 阶段3:数据库 优点:使用专门的程序封装了算法部分 数据库与IO比较:算法 + 文件存储数据数据库结构: 算法部分:.exe程序 lib文件夹下 文件存储部分:以文件和文

javascript相关的增删改查以及this的理解

前两天做了一个有关表单增删改查的例子,现在贴出来.主要是想好好说一下this. 下面贴一张我要做的表格效果. 就是实现简单的一个增删改查. 1.点击增加后自动增加一行: 2.点击保存当前行会将属性改成只读属性: 3.点击编辑会自动编辑,input的属性会变成可读可写属性: 4.点击删除会出现弹框,确定该条是否会删除. 下面贴出代码,不要很激动哦,哈哈! 提前说一下,代码是基于jquery以及bootstrap的,以下有用到该框架的js以及css HTML代码: <table class="