struts中使用token进行表单重复提交的验证

本文介绍如何使用Struts2框架中的token拦截器防止表单重复提交,并提供了一个利用jQuery禁用提交按钮的替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一个使用了ssh的项目中,遇到了表单重复提交的问题。经过查找知道了struts中有对表单重复验证的方法,具体实现过程如下:

首先配置struts.xml配置文件:在所需要控制的表单对应的action下面加入token拦截器。代码如下:

   <action name="contract" class="hl.contract.FContAction">
      <interceptor-ref name="defaultStack"></interceptor-ref>   //必须写
      <interceptor-ref name="token">
      <param name="includeMethods">activateCard</param>     //includeMethods表示需要拦截的具体方法,excludeMethods表示不会拦截的方法,即不会进行重复提交验证
      </interceptor-ref>
      <result name="invalid.token">/public/dispatch/resubmitError.jsp</result>  //struts验证返回的结果为invalid.token
      <result name="success">/hl/contract/contractINFO.jsp</result>
   </action>
以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果,因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果。

然后,再看看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>Struts 2 Cool Tags - <s:token/ ></title>
    <s:head />
</head>
<body>    
    <h2><s:token/></h2>
    <s:actionerror />
    <s:form action="Token" >
        <s:textfield name="message" label="Message" />
        <s:token />
        <s:submit />
    </s:form>
</body>
</html>
加入<s:token />标志,注意该标签要放在<s:form>标签里面。

java程序在这里就不写了,就是正常的action类。

这样就实现了表单重复提交的验证功能。


------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

但是,由于我们项目中要求不能进行错误页面跳转,所以没有采用此方法。

而是使用了jQuery的方法,在提交表单后把“提交”功能禁掉,代码如下:

$("#msForm").on("submit", false);  //msForm为表单的id.这句话就是把form表单的功能禁掉.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值