系列文章目录

文章目录

  • 系列文章目录
  • 前言——修改密码的思路
  • 修改密码功能
  • 一、修改密码功能——DAO抽取公共更新方法、service层也可以写hql
  • 单元测试测试service
  • 二、 Action和Jsp的实现
  • 使用js提交表单(经常会用到)
  • 总结
  • 注意

前言——修改密码的思路

修改密码的思路:

点击修改密码

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面


一点这个“确定”按钮就发送一个请求给Action

Action里面去写个方法来接收它修改密码

而Action里面这个方法依次调用Service层

Servicec层又调用Dao层

思路就是这样,具有实现也很简单,下面看具体实现

修改密码功能

具体操作

先搜索确认密码在哪触发

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_02

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_03


仔细看代码,其实就是一个表单,有个确定有个取消

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_04


一定要注意,代码量里面并没有确认和取消按钮

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_02


我们需要找一下修改密码的点击事件

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_06


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_07


js方法一般写在上面的,我们在页面上往上看

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_08


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_09


那么现在我们就是要找确定按钮

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_10


这个地方我们要注意,以前我们的确定按钮一般都是放到表单里面去的,现在它给我们一种误解了,没有放在表单里面

这里是需要注意的

分析完前端页面之后再理一下流程

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_11


注意这里action和jsp需要一起写

下面开始具体写

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_12


首先,新密码要和确认的密码一致才能修改成功

这个我们暂时放一下

考虑一下修改的必要条件

需要传一个密码过来,并且还要传一个id,不然不知道是改谁的密码

所以我们一点击确定的时候要传这两个值给service层

但是我们发现jsp里面确定是时候也没有提交表单,这怎么处理呢?

接着往下看,你会找到答案

一、修改密码功能——DAO抽取公共更新方法、service层也可以写hql

何为抽取?

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_13


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_14


执行这个hql的时候传多个参数的时候,参数也可以随之传进来

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_15


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_16


没有直接可用的方法怎么办?

因为hibernateTemplate本身是对session的一个封装,一定要明白hibernateTemplate只是一个封装,让我们的操作更简单而已

我们可以用回session,即我们完全可以获取它的session

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_17


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_18


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_19


注意与当前线程绑定的session不需要关闭,如果关闭了,可能会显示不出数据baseDao层写完之后,其实Dao层继承了baseDao,即Dao层拥有baseDao的一切功能,所以相当于Dao层也写完了

接下来

就是service层了

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_20

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_21


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_22

我们这里需要注意,我们把hql就写在了service层里面了,而不是dao层,这样也是可以的

然后我们先不管jsp页面,我们先用单元测试测一下这个service

单元测试测试service

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_23


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_24


看看能不能修改成功

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_25


这有就成功了

单元测试成功,继续往下就是Action和jsp了

这里我们先放一下,我们回顾一下另外一种方法

以前我们是不是可以把hql放到映射文件里面去

写在映射文件里面的好处是什么呢,好处就是一旦我们的hql(或者是sql)语句要改的时候,不需要重新编译

这点跟写在配置文件的原理是一样的

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_26


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_27


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_28


完了之后就去实现它

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_29


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_30


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_31


两种方式都可以,你想怎么写就怎么写

二、 Action和Jsp的实现

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_32


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_33


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_34


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_35


注意为什么不写password,因为模型里面有,第一是重名了不好,第二是模型驱动如果去获取password就会是一个新的密码了

当然password也不是不可以,只是操作上有一少许变化

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_36


上面这个获取不到值的

正确写法是这样

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_37


但是我们发现一个问题,打脸了

好了虽然可以获取到前端用户输入的新旧密码,但是获取却不到id,

除非我们在登录的时候就把id放到session域里面去,这是一种思路,

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_38


(其实已经放了,红框标记的这行代码和上面那行代码意思是一样的,只是命名不同而已)这样才能获取到id

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_39


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_40


因为相比下面的方式这种方式比较繁琐,但是是完全可以实现修改密码的

这里我们换一种更少代码的方式

还是得写password(打脸了)

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_41

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_42


需要注意

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_43


因为登录的时候我们把它已经放到session域了

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_44

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_45

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_46


Action写完了,下面就是jsp了

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_47


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_48


现在我们提交是不是有问题,好像没有没有提交按钮(submit)

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_49


没有submit怎么办呢?

不要慌,没有就自己写

我们自己写js即可

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_50


目前为什么点取消是有反应的,点击确定没有反应,我们研究一下

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_51

那么点击确定没有反应,我没完全可以模仿这个取消

先测试一下看看能不能成功

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_修改密码_52


接下来就是模仿模仿

使用js提交表单(经常会用到)

思路很简单,我没只要拿到表单,调用它的submit方法就行了

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_前端页面_53


BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_54


这样也可以,好理解一些,但是追求简单的话,直接submit就行了,没必要加上.form

一行代码搞定
这就是通过js来提交

接来下就可以测试整套修改密码流程了

总结

1、与当前线程绑定的session不需要关闭
2、使用js来进行表单提交也是常用的一种方式,一定熟练掌握
3、模型驱动只能获取前端页面有的属性,前端页面的name属性名与模型(model)名一致的时候可以获取,
如果模型中没有或者前端中没有是获取不到的,两个条件是缺一不可的,
比如这篇文章中的User的id就是获取不了的,因为这里的前端页面用户不可能输入用户id,验证码通过模型驱动也是获取不到的,因为model中没有验证码字段

注意

注意该项目我们现在如果数据库里面新建一个账户,密码是明文是登录不了的,必须要密码也MD5加密才能登陆

因为登录验证是统一的,只验证转换过后的密码是否一致

BOS项目(SSH)04_01_修改密码功能(DAO抽取公共更新方法、service层也可以写hql)、Action和Jsp的实现、使用js提交表单_单元测试_55