在用struts提交表单的时候,提交后的页面和提交前的页面是同一个jsp,url的地址还是xxxx.do?method=xx,这样刷新以后还会再次提交,如果在forword中添加了direct=true,倒可以转到一个静态jsp中,可是隐藏的参数再次提交的话就会得不到,大家遇到这种情况都是怎么解决?用token?每一个action都写的话有点麻烦。

解决方案 »

  1.   

    用token,写一个BaseActionclass BaseAction extends Action {... execute(...) {
        if (tokenIsValid(..)) {
            abstract childExecute(...)
        }
    }}其它类都继承这个类,然后实现abstract childExecute方法即可
      

  2.   

    最好用token别的没有用过,防止重复提交
      

  3.   

    除了查询的*.do其他都要用direct=true,写一下不是很累的
    如果不想写,也可以在action中用response.sendRedirect
      

  4.   

    http://hi.baidu.com/%B3%BF%D1%F4%C2%FE%B2%BD/blog/item/c25b9fb44575ff718bd4b2d9.html
    以用户注册为例:
    在用户请求newUser.jsp之前,首先把请求转发到PrepareAction,PrepareAction 调用saveToken方法,创建一个新的令牌,并将令牌值保存在当前HttpSession中(新创建的),PrepareAction接着把请求转发给newUser.jsp.newUser.jsp中的<html:form>标签自动判断在session范围内是否存在Token,如果存在,就自动在表单中生成一个包含Token信息的隐藏字段,例如: 
    <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="....">在用户提交表单后,由InsertUserAction处理请求.在InsertUserAction中,调用isTokenValid方法,判断当前用户会话中的令牌值和请求参数中的令牌值是否匹配.如果匹配,就调用resetToken方法,删除Token,然后执行插入数据操作.如果不匹配,返回相关错误提示,进行相关操作.OK.酱紫就可以有效放置重复提交了.
      

  5.   

    关注下,没用过structs正打算学呢,我们用EOS5.6,平时遇到这种问题直接sendRedirect
      

  6.   

    struts token 很好解决这个问题,楼主可以google下
      

  7.   

    token 
    lz struts没仔细学...
      

  8.   

    struts确实没有仔细学,惭愧!
      

  9.   

    还是使用Token,实际上工作量并不会太大
      

  10.   

    当然可以用token的原理来解释这个问题