1、使用Struts2的表单标签,其中需要增加token标签。如下:
……
Java代码
<%@ taglib uri="/struts-tags" prefix="s" %>
……
<s:form action="page1" theme="simple">
<s:datetimepicker name="order.date" label="购买日期" toggleType="explode" value="today"/><br/>
<s:token/>
<s:reset/><s:submit/>
</s:form>
<%@ taglib uri="/struts-tags" prefix="s" %>
……
<s:form action="page1" theme="simple">
<s:datetimepicker name="order.date" label="购买日期" toggleType="explode" value="today"/><br/>
<s:token/>
<s:reset/><s:submit/>
</s:form>
2、在struts配置文件中增加token拦截器。如下:
Java代码
<?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="lee" extends="struts-default">
<action name="page1" class="org.bruce.Page1">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />
<result>/page1.jsp</result>
<result name="invalid.token">/page1error.jsp</result>
</action>
</package>
</struts>
<?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>
注意,需要name为invaid.token的result。这是当拦截器判断是重复提交的时候,会转向的结果。
3、invaid.token页面打印错误信息,一样可以使用struts标签。如下:
<s:actionerror/>
理解:
1、JSP使用<s:token/>标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
2、token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行 Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行
---------------------------------------------------------------------------------
对于采用token防止表单重复提交的原理我就不用多说了,大家也应该都知道,在这我只介绍在struts2中如何利用标签实现防止表单的重复提交。
首先在表单中加入标签 ,会生成一个隐藏域用于存储系统自动随机生成的token值。然后在action中启用TokenInterceptor,即在struts.xml中加入下面类似代码。
Java代码
1. <action name="register" class="UserAction" method="register">
2. <result>register_success.jsp</result>
3. <result name="input">register.jsp</result>
4. <result name="invalid.token">register.jsp</result>
5. <interceptor-ref name="token"></interceptor-ref>
6. <interceptor-ref name="defaultStack"></interceptor-ref>
7. </action>
<action name="register" class="UserAction" method="register">
<result>register_success.jsp</result>
<result name="input">register.jsp</result>
<result name="invalid.token">register.jsp</result>
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
其中<result name="invalid.token">register.jsp</result>”是在发生表单重复提交时,返回给用户提示信息的显示页面,同时还需在显示页面中加入 ;“<interceptor-ref name="token"></interceptor-ref>”是启用TokenInterceptor 如果表单重复提交,会提示The form has already been processed or no token was supplied, please try again。修改国际化文件struts.messages.invalid.token 的键值,提供自己定制的错误信息。比如:struts.messages.invalid.token= 您已经提交了表单,请不要重复提交。
分享到:
相关推荐
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:...
而在 Struts2 中,所有的标签都被统一管理,并通过在 JSP 文件头部声明 `<%@ taglib prefix="s" uri="/struts-tags" %>` 来启用 Struts2 的标签库。这种方式简化了开发过程中的配置工作,使得开发者可以更加专注于...
<s:token/> ``` #### 49. `<s:tree>` - 树形标签 创建树形结构。 ```xml <s:tree value="treeData" nodeLabel="%{#node.label}"/> ``` #### 50. `<s:treenode>` - 树节点标签 定义树中的节点。 ```xml <s:...
<s:option value="2" label="Option2"/> </s:optgroup> ``` ##### 31. `<s:optiontransferselect>` - 选项传递选择标签 用于实现选项传递选择功能。 ```jsp <s:optiontransferselect name="optionTransferSelect" ...
`<s:token>`标签用于防止重复提交,与Struts2的Token拦截器配合使用。 `<s:tree>`标签用于生成树形结构,适用于层次数据的展示。 `<s:treenode>`定义树结构中的节点。 T. `<s:updownselect>`,`<s:url>`: `<s:...
`<s:token>` 用于防止重复提交,`<s:tree>` 创建树形结构,`<s:treenode>` 定义树节点,`<s:updownselect>` 创建可上下选择的多选框,`<s:url>` 生成URL,通常与Action关联。 以上就是Struts标签的基本介绍,它们极...
- 示例:`<s:choose><s:when test="%{#session.user == 'admin'}">Admin Panel</s:when><s:otherwise>Guest</s:otherwise></s:choose>` - 用途:类似于 Java 中的 switch-case 结构,用于复杂的条件判断。 ##### ...
本文详细介绍了如何在Struts2框架中使用`<s:token/>`标签和`token`拦截器来防止表单重复提交。通过这种方式,可以有效地避免因重复提交而导致的数据冗余和其他潜在问题。对于开发者来说,理解和掌握这些技术是非常...
<s:merge var="mergedList" value="list1" into="list2"/> ``` ##### 30. `<s:optgroup>` 标签 - **用途**:创建分组的选项。 - **示例**: ```xml <s:optgroup label="Group 1" list="group1List" /> ``` ##...
虽然 Struts 2 不再推荐使用 Struts 1.x 的标签,但在某些情况下仍然可能见到 `<s:bean>` 标签。此标签用于访问 JavaBean 的属性值。例如:`<s:bean name="user" property="firstName"/>`,这里的 `name` 指定了 ...
<s:token name="struts2" /> <s:submit value="Submit" /> </s:form> ``` 然后,在Action配置中,添加`token`拦截器: ```xml <action name="register" class="com.struts2.action.RegisterAction"> <result ...
本文将详细介绍Struts2标签库中的部分核心功能,包括解决标签换行问题、submit标签的样式调整、以及select标签的使用。 一、Struts2标签换行问题及解决 在默认情况下,Struts2表单元素会自动换行,每个元素占据一...
<s:optiontransferselect name="selectedOptions" list="{'option1','option2','option3'}" headerKey="" headerValue="Select Options" /> ``` - **说明**: 允许用户从一个列表中选择并转移到另一个列表。 30. ...
<s:token/> <input type="button" onclick="mymethod(this.form);" .../> </form> ``` 2) **配置拦截器** 在 `struts.xml` 配置文件中,需要为对应的 action 添加 `token` 拦截器。例如: ```xml <action ...
- `<s:optgroup>` 用于组织下拉框的选项,例如:`<s:select list="myOptions"><s:optgroup label="Group1">...</s:optgroup></s:optgroup></s:select>`。 N. `<s:optiontransferselect>` 左右选择框,允许用户在两...
<s:token/> </s:form> ``` 4. **验证令牌**:当用户提交表单时,Struts2的拦截器会自动检测令牌。如果令牌有效,请求会被处理;如果令牌已经被使用或不存在,将会抛出异常,如`TokenException`。 5. **处理异常...
<s:token name="token" /> ``` 2. **验证Token**:在Action的execute方法或其他处理表单的方法中,Struts2会自动进行Token验证。如果Token无效,Action的execute方法不会被执行,而是返回一个默认的错误结果,...
<s:token/> <input type="submit" value="提交"/> </form> ``` 这里的`s:token`标签会自动生成一个隐藏的Token字段,其值与服务器端保存的Token对应。 5. 处理重复提交: 当用户尝试重复提交表单时,Struts2会...