zoukankan      html  css  js  c++  java
  • struts2防止表单重复提交

    本文来自Ruthless - 博客园

    struts.xml配置文件


    <?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>
    <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />

    <!-- struts2在防止表单重复提交的拦截中有2个,分别是:token,tokenSession。tokenSession继承token而来。
    通常情况下,使用tokenSession客户端感觉会比较友好。
    -->
    <!-- 如果重复提交,会跳转到error.jsp页面 -->
    <package name="person" namespace="/test" extends="struts-default">
    <action name="token" class="com.ljq.action.PersonAction">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="token" />
    <!-- 如果重复提交,跳转到error.jsp页面 -->
    <result name="invalid.token">/WEB-INF/page/error.jsp</result>
    <result>/WEB-INF/page/message.jsp</result>
    </action>
    <action name="tokenSession" class="com.ljq.action.PersonAction">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="tokenSession" />
    <!-- 如果重复提交,不会跳转到error.jsp页面 -->
    <result name="invalid.token">/WEB-INF/page/error.jsp</result>
    <result>/WEB-INF/page/message.jsp</result>
    </action>
    </package>
    </struts>

          

    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"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <title>防止表单重复提交</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    </head>

    <body>
    <!-- 防止表单重复提交,记得在form表单里填上<s:token></s:token> -->
    <!-- action="token"、action="tokenSession" -->
    <s:form action="token" namespace="/test" method="post">
    姓名:
    <s:textfield name="name"/><s:token></s:token>
    <input type="submit" value="发送"/>
    </s:form>
    </body>
    </html>

          

    message.jsp返回成功页面


    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    </head>

    <body>
    <s:property value="name"/><br/>
    <%=new Date() %>
    </body>
    </html>

          

    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+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">

    <title>My JSP 'error.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    </head>

    <body>
    您已经提交了表单,请不要重复提交。
    </body>
    </html>

  • 相关阅读:
    学习笔录——大话设计模式——简单工厂模式
    学习笔录——大话设计模式——代理模式
    学习笔录——大话设计模式——装饰模式
    经典扫雷下载
    C# 实现敏感词过滤
    C# 时间戳的相关操作
    easyui-datetimebox 控件绑定双击事件实现自动选中当前日期时间
    OpenGL笔记(4)纹理
    LearnOpenGL笔记(3)着色器
    c# 值类型和引用类型 笔记
  • 原文地址:https://www.cnblogs.com/toge/p/6114718.html
Copyright © 2011-2022 走看看