系列文章目录
文章目录
- 系列文章目录
- 前言——修改密码的思路
- 修改密码功能
- 一、修改密码功能——DAO抽取公共更新方法、service层也可以写hql
- 单元测试测试service
- 二、 Action和Jsp的实现
- 使用js提交表单(经常会用到)
- 总结
- 注意
前言——修改密码的思路
修改密码的思路:
点击修改密码
一点这个“确定”按钮就发送一个请求给Action
Action里面去写个方法来接收它修改密码
而Action里面这个方法依次调用Service层
Servicec层又调用Dao层
思路就是这样,具有实现也很简单,下面看具体实现
修改密码功能
具体操作
先搜索确认密码在哪触发
仔细看代码,其实就是一个表单,有个确定有个取消
一定要注意,代码量里面并没有确认和取消按钮
我们需要找一下修改密码的点击事件
js方法一般写在上面的,我们在页面上往上看
那么现在我们就是要找确定按钮
这个地方我们要注意,以前我们的确定按钮一般都是放到表单里面去的,现在它给我们一种误解了,没有放在表单里面
这里是需要注意的
分析完前端页面之后再理一下流程
注意这里action和jsp需要一起写
下面开始具体写
首先,新密码要和确认的密码一致才能修改成功
这个我们暂时放一下
考虑一下修改的必要条件
需要传一个密码过来,并且还要传一个id,不然不知道是改谁的密码
所以我们一点击确定的时候要传这两个值给service层
但是我们发现jsp里面确定是时候也没有提交表单,这怎么处理呢?
接着往下看,你会找到答案
一、修改密码功能——DAO抽取公共更新方法、service层也可以写hql
何为抽取?
执行这个hql的时候传多个参数的时候,参数也可以随之传进来
没有直接可用的方法怎么办?
因为hibernateTemplate本身是对session的一个封装,一定要明白hibernateTemplate只是一个封装,让我们的操作更简单而已
我们可以用回session,即我们完全可以获取它的session
注意与当前线程绑定的session不需要关闭,如果关闭了,可能会显示不出数据baseDao层写完之后,其实Dao层继承了baseDao,即Dao层拥有baseDao的一切功能,所以相当于Dao层也写完了
接下来
就是service层了
我们这里需要注意,我们把hql就写在了service层里面了,而不是dao层,这样也是可以的
然后我们先不管jsp页面,我们先用单元测试测一下这个service
单元测试测试service
看看能不能修改成功
这有就成功了
单元测试成功,继续往下就是Action和jsp了
这里我们先放一下,我们回顾一下另外一种方法
以前我们是不是可以把hql放到映射文件里面去
写在映射文件里面的好处是什么呢,好处就是一旦我们的hql(或者是sql)语句要改的时候,不需要重新编译
这点跟写在配置文件的原理是一样的
完了之后就去实现它
两种方式都可以,你想怎么写就怎么写
二、 Action和Jsp的实现
注意为什么不写password,因为模型里面有,第一是重名了不好,第二是模型驱动如果去获取password就会是一个新的密码了
当然password也不是不可以,只是操作上有一少许变化
上面这个获取不到值的
正确写法是这样
但是我们发现一个问题,打脸了
好了虽然可以获取到前端用户输入的新旧密码,但是获取却不到id,
除非我们在登录的时候就把id放到session域里面去,这是一种思路,
(其实已经放了,红框标记的这行代码和上面那行代码意思是一样的,只是命名不同而已)这样才能获取到id
因为相比下面的方式这种方式比较繁琐,但是是完全可以实现修改密码的
这里我们换一种更少代码的方式
还是得写password(打脸了)
需要注意
因为登录的时候我们把它已经放到session域了
Action写完了,下面就是jsp了
现在我们提交是不是有问题,好像没有没有提交按钮(submit)
没有submit怎么办呢?
不要慌,没有就自己写
我们自己写js即可
目前为什么点取消是有反应的,点击确定没有反应,我们研究一下
那么点击确定没有反应,我没完全可以模仿这个取消
先测试一下看看能不能成功
接下来就是模仿模仿
使用js提交表单(经常会用到)
思路很简单,我没只要拿到表单,调用它的submit方法就行了
这样也可以,好理解一些,但是追求简单的话,直接submit就行了,没必要加上.form
一行代码搞定
这就是通过js来提交
接来下就可以测试整套修改密码流程了
总结
1、与当前线程绑定的session不需要关闭
2、使用js来进行表单提交也是常用的一种方式,一定熟练掌握
3、模型驱动只能获取前端页面有的属性,前端页面的name属性名与模型(model)名一致的时候可以获取,
如果模型中没有或者前端中没有是获取不到的,两个条件是缺一不可的,
比如这篇文章中的User的id就是获取不了的,因为这里的前端页面用户不可能输入用户id,验证码通过模型驱动也是获取不到的,因为model中没有验证码字段
注意
注意该项目我们现在如果数据库里面新建一个账户,密码是明文是登录不了的,必须要密码也MD5加密才能登陆
因为登录验证是统一的,只验证转换过后的密码是否一致