Struts中防止表单重复提交

Posted on 2007-12-08 00:13 探佚 阅读(311) 评论(2)  编辑  收藏 所属分类: Java EE技术

 

在Struts中,表单的提交至少涉及两个Struts动作:

第一个负责把表单显示给用户

第二个负责对用户通过表单提交的数据进行处理

 

我们在第一个表单动作里生成一个Token(标记)并保存在HttpSession对象和表单的Hidden中各保存一份,在第二个动作里,对比Hidden和HttpSession中的值,如果匹配则正常处理,否则,则属于表单重复提交,总体来说思路与验证码类似。 

下面是具体实现步骤:

index.jsp

<href="redirect.do">添加用户</a>

RedirectAction.java 

public class RedirectAction extends Action {

      

       
public ActionForward execute(ActionMapping mapping, ActionForm form,

               HttpServletRequest request, HttpServletResponse response) {

             

              
this.saveToken(request);          // 生成Token

 

        
return mapping.findForward("input");

       }

}

input.jsp

<html:form action="user.do">

  userName:
<html:text property="userName"/>

  
<input type="hidden"

         name
="<%=Constants.TOKEN_KEY%>"

         value
="<%=session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>

  
<html:submit value="submit"/>

</html:form>

UserAction.java

public class UserAction extends Action {

      

       
public ActionForward execute(ActionMapping mapping, ActionForm form,

                     HttpServletRequest request, HttpServletResponse response) {

              
// 验证Token

              
if (!this.isTokenValid(request)) {

                     
return mapping.findForward("error");

              }

              
// 清除Token

              
this.resetToken(request);

              UserForm userForm 
= (UserForm) form;

       

              
// (后面代码与防止表单重复提交无关,不再叙述)

              HttpSession session 
= request.getSession();

        Vector userList 
= (Vector) session.getAttribute("userList");

        
if (userList == null) {

              userList 
= new Vector();

        }

        userList.add(userForm.getUserName());

        session.setAttribute(
"userList", userList);

       
return mapping.findForward("show");

       }

}

 

Feedback

# re: Struts中防止表单重复提交  回复  更多评论   

2008-04-10 12:09 by ss
fsgfd

# re: Struts中防止表单重复提交  回复  更多评论   

2008-04-10 12:09 by ss
fas

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

Copyright © 探佚