struts2实现防止表单重复提交
来源:互联网 发布:淘宝怎么写标题 编辑:程序博客网 时间:2024/06/06 10:38
1.使用Struts2的表单标签,其中需要增加token标签。
<s:token/>标签其实底层是这么实现的:
首先会在form表单里产生一个hidden类型的<input>标签:
<input type="hidden" name="token" value="9AUOGRO10QB77EAJ65NYE6ROHWZ3IIQN" />
然后struts2会生成一个全局唯一的字符串token放置在session会话中。表单提交时检查表单提交的token和session会话中的值是否相同,相同则执行action,执行完成之后会修改session中token的值。
否则会被拦截到
invalid.token结果中。因此还需在action中声明invalid.token结果视图。
如下:
<%@ page language="java" contentType="text/html; charset=utf-8"import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body><s:form action="myAction" method="post" namespace="/">名字:<s:textfield name="name"></s:textfield><br><s:token/><s:submit value="提交"></s:submit></s:form></body></html>
2.在struts配置文件中为action增加token拦截器。
这里需要注意一点:struts2中所有action默认使用defaultStack拦截器栈,struts2的很多功能都是依靠拦截器栈中的拦截器的支撑。
如果手动在aciton中添加拦截器,这时会导致acton丢失defaultStack拦截器栈,所有我们在手动添加拦截器的时候,还需要手动添加defaultStack拦截器栈
如下:
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="default" namespace="/" extends="struts-default"><action name="myAction" class="com.itheima.action.MyToken"><span style="color:#FF0000;"><interceptor-ref name="defaultStack"></interceptor-ref></span><span style="color:#FF0000;"><interceptor-ref name="token"></interceptor-ref></span><span style="color:#FF0000;"><result name="invalid.token">/index.jsp</result></span><result>/success.jsp</result></action> </package></struts>
3.我们可以通过<s:actionerror/>标签输出错误信息
<%@ page language="java" contentType="text/html; charset=utf-8"import="java.util.*" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Insert title here</title></head><body><span style="color:#FF0000;"><s:actionerror/></span><s:form action="myAction" method="post" namespace="/">名字:<s:textfield name="name"></s:textfield><br><s:token/><s:submit value="提交"></s:submit></s:form></body></html>因为显示的是英文,我们可以通过修改国际化文件struts.messages.invalid.token 的键值,提供自己定制的错误信息。比如:struts.messages.invalid.token= 您已经提交了表单,请不要重复提交。
0 0
- struts2实现防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交 .
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2 防止表单重复提交
- struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- Struts2防止表单重复提交
- struts2防止表单重复提交
- 关于HbernateTemplate的简单用法
- DVFS简介
- ubuntu安装zend studio10.6.0
- 西安喜宝月子中心
- 开发者必须了解的10大跨平台移动开发工具
- struts2实现防止表单重复提交
- 深入浅出 Cocoa 之多线程 NSThread
- Android Tthread 建立线程使用方法
- 移动端webapp开发必备知识
- flume-ng+Kafka+Storm+HDFS+jdbc 实时系统搭建的完美整合
- Maven实战(四)生命周期
- linux文件传输 rz sz scp rsync
- MProtect使用小计【三】 – 权限管理
- iOS 错误 property's synthesized getter follows Cocoa naming convention for returning 'owned' objects