struts2模型驱动和令牌拦截器
模型驱动:
*要从页面中获取表单元素的值,需要在动作类中声明与页面元素同名的属性。导致动作类中既有javabean又有业务方法。
*将javabean和业务方法进行分离:
*将重新创建一个javabean,将javabean的内容放置其中。
*动作类action中只留业务方法
*在动作类中声明的javabean无法从页面中获取同名的属性
*需要使用struts2框架提供的"modelDriven(模型驱动)"
*实现ModelDriven这个接口
*重写getModel()方法,返回该javabean的实例
*代码如下:
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user = new User();
@Override
public User getModel() {
// TODO Auto-generated method stub
return user;
}
public String add(){
System.out.println("UserAction******add()");
return "add";
}
public String save(){
System.out.println("UserAction******save()");
System.out.println("username="+user.getUsername());
System.out.println("tel="+user.getTel());
System.out.println("des="+user.getDes());
return "success";
}
}
*模型驱动的原理:
*在不适用模型驱动的时候,之所以在动作类中获取不到对应的属性的原因:
*在ValueStack中没有对应javabean的所有属性
*模型驱动的作用,就是讲javabean的实例压入对象栈的栈顶,从而可以获取到对应的属性的值
页面回显技术:
*通过模型驱动,在动作类action中,可以获取到页面中元素的值
//方法一
*通过javabean实例的set()方法,将新的内容set到javabean中,从而放置在页面对应元素中
User newUser = new User();
newUser.setUsername("zhang");
newUser.setTel("123987654");
newUser.setDes("xxx");
//页面回显技术
//方法一
user.setUsername(newUser.getUsername());
user.setTel(newUser.getTel());
user.setDes(newUser.getDes());
//方法二
*首先将值栈中,旧的javabean的内容,删除掉
*然后将新的内容压入到值栈中的栈顶
User newUser = new User();
newUser.setUsername("zhang");
newUser.setTel("123987654");
newUser.setDes("xxx");
ValueStack valueStack = ServletActionContext.getContext().getValueStack();
valueStack.pop();
valueStack.push(newUser);
处理表单重复提交:
*在页面中增加一个隐藏域:<s:token></token>
*在struts_model.xml里添加配置信息,具体配置如下:
<interceptors>
<interceptor-stack name="tokenStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token">
<!-- 配置令牌拦截器,拦截的方法名,如果配置多个方法时,用逗号隔开 -->
<param name="includeMethods">save,update</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="tokenStack"></default-interceptor-ref>
*在struts_model.xml中增加一个result结果类型:
<!-- 配置表单重复提交后,要转向到的页面 -->
<result name="invalid.token">/model/error.jsp</result>
*在表单提交后,要转向的页面中,通过<s:actionerror>获取struts2框架底层提供错误提示信息
*将struts2框架底层提供错误提示信息改成中文
*在与动作类action同级目录下,创建名为token.properties 的资源文件,文件内容如下
struts.message.invalid.token=表单重复提交,请刷新后重试
struts2模型驱动和令牌拦截器相关推荐
- struts2 拦截器_Struts2令牌拦截器示例
struts2 拦截器 Struts 2 token interceptor can be used to handle multiple form submission problem. While ...
- 【struts2】预定义拦截器
1)预定义拦截器 Struts2有默认的拦截器配置,也就是说,虽然我们没有主动去配置任何关于拦截器的东西,但是Struts2会使用默认引用的拦截器.由于Struts2的默认拦截器声明和引用都在这个St ...
- 使用struts2中默认的拦截器以及自定义拦截器
转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...
- Struts2——(7)拦截器组件
AOP:面向切面编程(通过配置文件来指定作用到目标对象) OOP:面向对象编程 AOP具有很好的可插拔特性,很灵活. 可用于封装共通的业务处理,之后可以通过配置作用到Action组件上. 共通的业务处 ...
- struts2(三) 输入校验和拦截器
前面知道了struts2的架构图和struts2的自动封装表单参数和数据类型自动转换,今天来学struts2的第三第四个东西,输入校验和拦截器, --WH 一.输入校验 在以前我们写一个登录页面时,并 ...
- Struts2 源码分析——拦截器的机制
本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样 ...
- Struts2入门(二)——配置拦截器
一.前言 之前便了解过,Struts 2的核心控制器是一个Filter过滤器,负责拦截所有的用户请求,当用户请求发送过来时,会去检测struts.xml是否存在这个action,如果存在,服务器便会自 ...
- 在struts2中配置自定义拦截器放行多个方法
源码: 自定义的拦截器类: //自定义拦截器类:LoginInterceptor ; package com.java.action.interceptor; import javax.servlet ...
- struts2 ModelDriven 和 Preparable 拦截器
Struts2 运行流程图-1 ActionProxy 是 Action 的一个代理类,也就是说Action的调用是通过 ActionProxy 实现的,其实就是调用了ActionProxy.exec ...
最新文章
- AI时代的幕后英雄:谁在生产高质量的AI训练数据?
- 磁盘分区形式mbr和gpt哪个好_济南历下区中考美术集训应该选哪个
- 用python pandas按块读取超大csv/txt
- 微信浏览器 返回按钮二次返回
- mysql join 循环_关于mysql联表的内嵌循环操作nested loop join中on和where执行顺序问题...
- using(){},Close(),Dispose()的区别
- 360私有云平台-HULK 5岁啦~
- RQNOJ 140 分配时间:dp
- python产品缺陷检测_3 Kaggle钢材表面缺陷检测竞赛的探索与实践-阿里云开发者社区...
- 工业设计与钣金工艺是怎么相互相成的
- java邮箱格式校验
- html span 字体位置,span内文字居中css布局方法_让span内容居中
- 最新章节 第238章 超级计算机的安排,第238章 黄花大闺女
- 一文读懂元数据的概念、分类及作用
- Pycharm2017补丁破解
- Unsafe code may only appear if compiling with /unsafe
- linux下传输文件命令
- 基于libyuv库的NV12格式图片的缩放
- T51 运行文本指令
- windows命令获取帮助_如何在Windows 10中获得帮助
热门文章
- 浅谈Java中equals()和==的区别
- IntelliJ IDEA 15快捷键大全
- chrome应用程序无法启动因为并行配置不正确的处理办法(亲测版本不一样也是类似的操作)
- WSGI接口(廖雪峰重点)
- js如何循环拼接字符串
- PHP CURL 多线程 GET/POST 类
- python整数格式显示_[python之路]格式化显示
- PHP中empty,is_null,isset的区别
- jquery中获取元素的几种方式小结
- java 文件删除异常 ut_【JAVA-UT】12、抛出了指定的异常吗?