ModelDriven和Preparable拦截器

  • 提出问题
    • 如果不使用ModelDriven和Preparable拦截器技术,Action类需要包含JavaBean中的业务属性,例如:

  • 目标:将冗余代码抽取出来,把操作一个一个散列的属性变为操作一个对象——在这里就是封装了业务信息的领域模型:JavaBean,以实现模块化编程。
  • 分析问题
    • 当前的情况下,目标Action的实例对象会被压入值栈栈顶,params拦截器会将表单域中的值注入到目标Action(也就是栈顶对象)对应的属性中。

  • 我们的需求就是:如何在params拦截器工作之前把JavaBean压入值栈栈顶
  • 解决问题
    • 使用ModelDriven拦截器
    • 使用方法:

①让我们的Action方法实现com.opensymphony.xwork2.ModelDriven接口,如图所示:

update()方法

delete()方法

edit()方法

原因分析:

①ModelDriven拦截器工作之后,Action类中的JavaBean和值栈栈顶的JavaBean指向的都是getModel()方法返回的那个对象,如图所示:

②执行edit()方法后,Action类中的JavaBean指向的就是从Dao中取出的对象,而此时值栈栈顶的对象指向的还是原来那个对象,没有被注入从数据库中取出的数据,而表单回显依靠的是栈顶对象

此时edit()方法正确的写法是:

正确回显:

遗留问题:edit()方法过于繁琐,还停留在面向过程的实现方式。如何改进?

 


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
电话:010-56253825
邮箱:info@atguigu.com
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

 深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)