struts2重复提交表单问题。 我有两个页面,第一个页面提交表单后,转到另外一个页面,但是在第二个页面点击刷新会重复提交上个页面表单,请问怎么处理? 跳转方式 dispatcher谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 呵呵,建议楼主去看一下struts2 的token标签,这是个专门用来解决表单重复提交的,我有个小例子要的话我给你发过去,不过还是建议楼主自己摸索着做!!加油 token 只能用在同一个页面跳转吧? 防止表单重复提交主要用的到标签是<s: token />,拦截器 <interceptor-ref name="token" />,还有一个默认的返回值<result name="invalid.token">/input.jsp</result> 在页面加载时,<s: token />产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如:<input type="hidden" name="struts.token.name" value="struts.token"/><input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/>同时,将GUID放到会话(session)中;在执行action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。以下为action代码import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport { private static final long serialVersionUID = 6820659617470261780L; private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } @Override public String execute() { System.out.println("Executing action, your message is " + message); return SUCCESS; } }再看看JSP的写法<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>struts2 test token</title> <s:head /></head><body> <s:actionerror /> <s:form action="testAction" > <s:textfield name="message" label="Message" /> <s:token /> <%-- 注意这里--%> <s:submit /> </s:form></body></html>下面是struts2的配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="test" extends="struts-default" namespace="/testToken"> <action name="test" class="com.fhx.TestAction"> <result name="invalid.token">/input.jsp</result> <result>/input.jsp</result> <interceptor-ref name="defaultStack" /> <interceptor-ref name="token" /> </action> </package></struts>以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果,因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果。 token 可以防止重复提交数据。楼主可以看下例子。挺简单的标记。 我做的是struts2 中一个表单提交到action 经由action处理后在转到另外一个页面1,在刷新这个页面1就会报重复提交啊!!这个用token可以解决楼主的意思我有点不明白,同一个页面跳转? 我认为是你在跳转到另外一个jsp后,url还是显示刚才你用的action的例如你的/login.do你跳转后,地址栏中还是/login。do,此时刷新,又会执行一次你的action,楼主可以采用重定向的方式,把url修改为目标jsp或则action,不知道我的理解是否是楼主的意思。 hibernate 存入 MYSQL 乱码 那个地方有错误? java 点对点 聊天 hibernate 用uuid.hex生成的主键id有没有方法可以返回 xml 全局属性通配符问题怎么回事啊? tomcat的安装与启动 [求助]JDOM创建xml文档问题,请高手指点! 学Java是不是要学习C++ ejb牛犊:不太明白ejb分布式的技术体现在哪里? 请教一个关于Tomcat5的古怪问题 Applet如何添加事件响应 spring,ibatis 配置事务问
在页面加载时,<s: token />产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如:<input type="hidden" name="struts.token.name" value="struts.token"/>
<input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/>同时,将GUID放到会话(session)中;在执行action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。以下为action代码import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport {
private static final long serialVersionUID = 6820659617470261780L;
private String message;
public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
}
@Override
public String execute() {
System.out.println("Executing action, your message is " + message);
return SUCCESS;
}
}再看看JSP的写法<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>struts2 test token</title>
<s:head />
</head>
<body>
<s:actionerror />
<s:form action="testAction" >
<s:textfield name="message" label="Message" />
<s:token /> <%-- 注意这里--%>
<s:submit />
</s:form>
</body>
</html>下面是struts2的配置文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts>
<package name="test" extends="struts-default" namespace="/testToken">
<action name="test" class="com.fhx.TestAction">
<result name="invalid.token">/input.jsp</result>
<result>/input.jsp</result> <interceptor-ref name="defaultStack" />
<interceptor-ref name="token" /> </action>
</package>
</struts>以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果,因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果。
楼主可以看下例子。
挺简单的标记。
楼主的意思我有点不明白,同一个页面跳转?