日期:2014-05-17  浏览次数:20751 次

重新问struts2防止重复提交的问题,上个贴没说明白问题
上个贴问题没说明白,大家见谅,重新说一下。

网上搜索了下,说这个功能可以用struts2的token来做。

有个center.jsp,这个jsp上的菜单栏有个“发布物品”的链接,点这个“发布物品”会去后台查询物品分类等信息,并将此数据带回,进入发布物品的页面goodsAdd.jsp。在此页面可以填写物品基本信息,最后点击按钮保存物品。这个页面goodsAdd.jsp我想做防止重复提交。

不过我还没有到这一步。我更改了struts.xml,加了<result name="invaild.token">error.jsp</result>和token拦截器。
在点击发布物品这个链接之后,进不到填写物品基本信息的页面goodsAdd.jsp了,直接转到error.jsp。

我发现在点击发布物品这个链接之后,根本就没有进入action方法,可能直接返回了invalid.token,然后就转到error.jsp

现在想goodsAdd.jsp里加token都加不了,因为就进不去这个页面了

请问大家我这是哪里不对了?


菜单栏链接
HTML code
<a href="goodsAction_enterGoodsAddAction">发布物品</a>


struts.xml

XML code
<!-- 物品管理 -->
<action name="goodsAction_*" class="com.campus.foreground.action.GoodsAction" method="{1}">
<result name="invaild.token">error.jsp</result>
<result name="addSuccess">centerGoodsAdd3.jsp</result>
<result name="updateSuccess" type="chain" >goodsAction_retrieveGoodsAllAction</result>            
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>


------解决方案--------------------
你用的通配符,
当你请求到goodsAction_enterGoodsAddAction 也要token值
你只有分开配,

进入输入页面不要配token
<action name="goodsAction_enterGoodsAddAction" class="com.campus.foreground.action.GoodsAction" method="enterGoodsAddAction">
<result name="invaild.token">error.jsp</result>
<result name="addSuccess">centerGoodsAdd3.jsp</result>
<result name="updateSuccess" type="chain" >goodsAction_retrieveGoodsAllAction</result>
</action>

输入信息有提交的action在配token


------解决方案--------------------
没必要增加很多action.name,你只要在拦截器里面配置要需要拦截的方法名就行了
<interceptor-ref name="tokenSession">
<param name="includeMethods">填上你需要拦截的方法名(action里面自己写的方法名如add等。。。),多个的话用逗号隔开</param>
</interceptor-ref>
 然后在相应的form中添加<s:token></s:token>就行了

------解决方案--------------------
<interceptor-ref name="token">
<param name="includeMethods"></param>
<param name="excludeMethods "></param>
<interceptor-ref>
过滤相应的方法名就可以了