博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2 中 paramsPrepareParamsStack 拦截器
阅读量:7294 次
发布时间:2019-06-30

本文共 2325 字,大约阅读时间需要 7 分钟。

在struts2中,其拦截器为框架精华部分,而二次参数拦截器paramsPrepareParamsStack  对于解决数据回显,对象修改属性丢失的问题有着很良好的处理机制。

在 struts-default.xml 中的默认拦截器配置中有以下部分(可自行查找源码,通常为:struts-2.5.2\src\core\src\main\resources):

1 
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input,back,cancel,browse 20
21
22
input,back,cancel,browse
23
24

 

(1)、关于 <interceptor-ref name="params"/>

                 把页面提交的参数封装到Action中的对象里面,只有在Action中声明的属性才能接受和封装,即只接受给定的属性,(多个参数时过滤后也只封装与给定条件吻合的)

                 同时Action必须提供get,set方法.

1 //例:2 private Long id;3 public Long getId() {4    return id;5 }6 public void setId(Long id) {7    this.id = id;8 }

 

进入此Action中,栈顶元素为:EmployeeAction

(默认情况下访问那个action,那个action就在栈顶)

(2)、<interceptor-ref name="prepare"/>

EmlpoyeeAction.java

1 /** 2  * 使用action中配置的拦截器相应函数 3  * 自动在input方法之前自动执行 4  * 完成参数回显 5  */ 6 public void prepareInput() throws Exception { 7     if (id != null) { 8         employee = employeeService.get(id); // 回显 9     }10 }11 12 // 自动在save方法之前自动执行13 // 解决参数丢失的问题14 public void prepareSave() throws Exception {15     if (id != null) {16         employee = employeeService.get(id); // 保证属性不丢失关键代码17     } else {18         employee = new Employee();19     }20 }21 22 23 // 最后执行public void prepare()方法24 // 自动在所有strtus方法之前自动执行:拦截器的顺序问题25 @Override26 public void prepare() throws Exception {27     //相关功能,或者留空28 }

 

(3)、<interceptor-ref name="modelDriven"/>     驱动模型后,伴随压栈操作

EmployeeAction.java

1 @Override2 public Employee getModel() {3     return employee;  //这里返回preoare经过验证拿到的对象4 }

进入此Action中,栈顶元素为:Employee

(因为在经过二次参数拦截器的时候,里面无论是从数据库拿还是new一个对象,此时都有一个相对于之前内容不相同的同一类对象,所以,会执行压栈操作,将拿到的对象放在栈顶)

重点:

<interceptor-ref name="params"/>--------------------------------------------------------------------------------(4)

装的对象(1),和经过之前prepareXxx()方法获取到的对象(2),

即此时栈顶的对象(2)进行属性的对比,如果1中的属性缺失,会将缺失属性补足,然后进行后续操作.

最后:

         执行Action中页面调用的方法,返回结果视图,进行页面跳转.

另外,配置玩二次参数拦截器之后,再检查一遍struts.xml配置文件中的内容

 

转载于:https://www.cnblogs.com/llynic/p/6269765.html

你可能感兴趣的文章
关于头文件
查看>>
DDGScreenShot—图片擦除功能
查看>>
微软正式发布Chromium Edge开发预览版
查看>>
最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用45
查看>>
解决 'chromedriver' executable needs to be in PATH.'报错
查看>>
构建之法
查看>>
找到当前mysql group replication 环境的primary结点
查看>>
Fibonacci
查看>>
12.4.1 压缩索引
查看>>
springmvc图片上传(兼容ie8以上,实时预览)
查看>>
联想G510安装win7系统
查看>>
zabbix如何监控WEB应用性能
查看>>
mysql awr v1.0.1发布
查看>>
发布ASP.NET Core程序到Linux生产环境
查看>>
Java总结第一次//有些图片未显示,文章包含基础java语言及各种语句
查看>>
CString转换成char*
查看>>
Java中windows路径转换成linux路径等工具类
查看>>
Android 对listview中每个item高度的设置
查看>>
Vs 2015 调试ASP.NET Core修改监听端口
查看>>
Angular2学习笔记——NgModule
查看>>