Struts2中利用token标签实现防止表单重复提交

1.表单中添加token标签 

引入<%@taglib uri="/struts-tags" prefix="s" %>

 提交表单前加<s:token></s:token>

<form method="post" action="${pageContext.request.contextPath}/room/update">
	
	教室名称:<input type="text" name="room.name"> <br/>
	教室位置:<input type="text" name="room.address"><br/>
	<s:token></s:token>
	<input type="submit" value="提交"/>
</form>

2、Struts配置全局拦截器

token和tokenSession

includeMethods 拦截哪些方法

 excludesMethods 不拦截哪些方法

<?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>
<constant name="struts.devMode" value="true"></constant>
<include file="student.xml"></include>
<include file="contact.xml"></include>
<include file="room.xml"></include>
<include file="teacher.xml"></include>
<include file="course.xml"></include>
<package name="all" namespace="/" extends="struts-default">
<!-- 配置执行的拦截器栈,增加令牌拦截器 -->
	 <interceptors>  
	 	  <!--配置一个拦截器栈,里面包含自己定义的拦截器和defaultStack默认拦截器-->  
	      <interceptor-stack name="myStack">     
	      		<interceptor-ref name="tokenSession">
	      			<!-- 配置令牌拦截器,拦截的方法名,如果配置多个方法时,用","隔开 -->
	            	<param name="includeMethods">update</param> 
	            	<!--  定义被排除的方法名,也就是你action中不被这个拦截器拦截的方法名  -->
	            <param name="excludeMethods"></param>
	      		</interceptor-ref>    
	      		<interceptor-ref name="defaultStack"/>          
	      </interceptor-stack >    
	  </interceptors>  
	  <!--引用默认的拦截器(栈)--> 
	  <default-interceptor-ref name="myStack">
	  </default-interceptor-ref>
	<!--配置一个全局结果集-->  
 	<global-results>
 		<result name="main">/main.jsp</result>
 	</global-results>
</package>
</struts>

3、让action处理类继承于ActionSupport

public class RoomAction extends ActionSupport
{
    public String update()
	{
		if(room.getId()==0)
		{
			ServletActionContext.getContext().put("ADD", true);
		}
		dao.update(room);
		return main();
	}
}

猜你喜欢

转载自blog.csdn.net/tangbin0505/article/details/82218435
今日推荐