一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

struts2防页面刷新重复提交方法总结

时间:2013-09-29 编辑:简简单单 来源:一聚教程网

struts.xml配置文件

 代码如下 复制代码



"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">






Action">



/WEB-INF/page/error.jsp
/WEB-INF/page/message.jsp





/WEB-INF/page/error.jsp
/WEB-INF/page/message.jsp


 

     

PersonAction类

 代码如下 复制代码


package com.ljq.action;


import java.util.ArrayList;
import java.util.List;

public class PersonAction {

private String name;

@SuppressWarnings("unchecked")
//观看控制台
//如果token生效则不会在控制台输出name的值,而会输出如下警告: 2011-3-14 20:45:32 com.opensymphony.xwork2.util.logging.commons.CommonsLogger
//warn 警告: Form token EDZ4S96RNDN5VD8B1CQTK6FTHIJUPC66 does not match the session token null.
public String execute() {
List ls = new ArrayList();
ls.add(name);
for (int i = 0; i < ls.size(); i++) {
System.out.println(ls.get(i));
}
return "success";
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

 

     

index.jsp表单页面

 代码如下 复制代码


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>


防止表单重复提交







姓名:



     

message.jsp返回成功页面

 代码如下 复制代码


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>


My JSP 'index.jsp' starting page






<%=new Date() %>

error.jsp表单重复提交提示页面

 

 代码如下 复制代码

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>




My JSP 'error.jsp' starting page




words" content="keyword1,keyword2,keyword3">


您已经提交了表单,请不要重复提交。


例二

需要做以下几个步骤:1、jsp中增加 ;2、struts2配置文件中.action中增加几行代码:

 代码如下 复制代码


/token.jsp   

  //如果是重复提交则跳转至token.jsp页面另外注意点的是:在提交成功后的 也设置type=redirect在页面加载时,产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如

 代码如下 复制代码

清 单6 的HTML输出同时,将GUID放到会话(session)中;在执行 action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向 actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。具体实现首先看一下Action的代码:

 代码如下 复制代码

package tutorial;{
private static final long serialVersionUID = 6820659617470261780L;{
return message;
}{
this.message = message;
}{
System.out.println(“Executing action, your message is “ + message);
return SUCCESS;
}
}import com.opensymphony.xwork2.ActionSupport;public class CoolTagAction extends ActionSupport
public String getMessage()

public void setMessage(String message)

@Override
public String execute()

清 单7 src/tutorial/CoolTagAction.java以上代码一目了然,再看看JSP的写法:JSP也很简单,就是加入标志。

 代码如下 复制代码
%@ page language=”java” contentType=”text/html; charset=utf-8″ pageEncoding=”utf-8″ %>
<%@ taglib prefix=“s“
uri=“/struts-tags“
%>


Struts 2 Cool Tags – <s:token/ >



struts2防重复提交









清单8 WebContent/token.jsp接下来是Actoin配置的XML片段:

 代码如下 复制代码
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>




/token.jsp
/token.jsp


/{1}.jsp


清单9 src/struts.xml以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果, 因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果

热门栏目