我的进入action的路径如下,进去后是执行删除记录的功能:url = "<%=basePath%>deleteEmail?ids="+ids
window.location.href = url;action 配置如下:
<action name="deleteEmail" method="deleteEmail" class="emailConfAction">          
          <result>/sysconf/emailalertconf.jsp</result>
          <result name="invalid.token">/sysconf/emailalertconf.jsp</result>          
          <interceptor-ref name="defaultStack" /> 
          <interceptor-ref name="token"/> 
      </action> 为什么只要加上了 拦截器,上面路径就不能进入action,不能删除指定的数据,而只要把action的拦截器去掉。也就是把下面代码去掉          <result name="invalid.token">/sysconf/emailalertconf.jsp</result>          
          <interceptor-ref name="defaultStack" /> 
          <interceptor-ref name="token"/>删除记录功能就正常了,不过肯定是又会遇到重复提交的问题,!!!请问怎么解决呢?????

解决方案 »

  1.   

    特殊的隐藏字段叫做token
    <s:url id="formUrl" action="longLivedTokenAction"/>
    <s:form action="%{formUrl}" method="post">
          <s:token />
          <s:textfield name="name" label="Name"/>
          <s:textfield name="password" label="Password"/>
          <s:submit/>
         
    </s:form>
    其中<s:token />标签用来生成一个唯一的隐藏字段,在运行的时候生成的内容如下:
    <input type="hidden" name="struts.token" value="C21ZWHEH0Q4B6FY15ZO5BFM1I9W8SIQH" /> 
    --------------------
    对它进行稍微改动
    <interceptor-ref name="defaultStack" /> 
      <interceptor-ref name="token"/>
                 |
                 |
                 
    <interceptor-ref name="token"/>
    <interceptor-ref name="basicStack"/> 
    还有将这四句代码  
      <result>/sysconf/emailalertconf.jsp</result>
      <result name="invalid.token">/sysconf/emailalertconf.jsp</result>  
      <interceptor-ref name="defaultStack" /> 
      <interceptor-ref name="token"/>  
      
    改为
        <interceptor-ref name="token"/>
        <interceptor-ref name="defaultStack" /> 
        <result>/sysconf/emailalertconf.jsp</result>
        <result name="invalid.token">/sysconf/emailalertconf.jsp</result> 
        即要让请求先经过过滤器的判断,看此次请求是否有提交记录,如果有,则通过invalid.token
        重定向到/sysconf/emailalertconf.jsp
    --------------希望对你有帮助