• struts2之防止表单重复提交


    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>
  • 相关阅读:
    Ubuntu 安装 NTP 服务
    Packer 如何将 JSON 的配置升级为 HCL2
    WinRM 如何设置 TrustedHosts
    Windows 10 如何设置网络属性为私有
    Windows 使用 PowerShell 来管理另外一台 Windows 机器
    Windows PowerShell ISE 是什么和 PowerShell 有什么区别
    Spring事务传播属性和隔离级别
    @SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用
    杂文 | 如何在演讲中讲个好故事
    2.2 思考框架:什么样的代码才是高效的代码
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4521800.html
Copyright © 2020-2023  润新知