您的位置:首页 > 编程语言

配置重复提交的代码后遇到的空指针问题

2009-08-20 10:36 585 查看
 如果在提交的时候想用struts2.1.6的重复提交功能。
会遇到莫名其妙的空指针的错误,如果把相关的<s:token/>等关于重复提交的配置
去掉就会一切正常,一加上Action所有的属性全部为空.
诊对这个问题,如果加上其它的拦截器如token的拦截器,那么struts2.1.6默认的拦截器
不会被执行,而为Action中的对象赋值刚好是默认拦截器的功能.

因此解决方法就是我们在配置过struts2.1.6重复提交的拦截器功能后还要手动的配置一下
默认的拦截器,否则前台页面提交的东西就不能自动的为Action进行赋值
相关的代码如下:
Struts.xml的配置文件如下:

<?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="default" namespace="/member" extends="struts-default">
<action name="memberAction_*" class="memberAction" method="{1}">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token" />

<result name="input">/regsiter.jsp</result>
<result name="success">/WEB-INF/jsp/member/regsucced.jsp
</result>

<!-- 重复提交后所要跳转的页面 -->
<result name="invalid.token">/error/error.jsp</result>
</action>
</package>
</struts>

还有一个问题就是:
如果正常输入进行提交是可以的,但是如果重复提交,报错后.不管咋样不能正常提交,即使输入的数据正确,也不能成功
一些错误需要清理一下.如果不清理,会永远保留于内存之中,每次提交的时候会检测的.
struts2.1.6提供了解决方案.
让Action类继承自Preparable,
并实现方法clearErrorsAndMessages().
在这个方法里面清除错误.
清除代码如下:
this.clearErrorsAndMessages();

关于Action重复提交的<s:token/>本人还遇到了一个问题:
如果当前Action配置了该标签,想用一个超链接链接到Action时会报错误,即跳转到invalid.token所配置的页面.
这是因为只要配置了<s:token/>标签Struts每次会去检测的.链接里面没有Stoken,所以会报这样的错误.
解决的办法是:
为当前的Action重新配置一个ACtion,不要配置<s:token/>.也就是说专门为含有表单的提交配置一个Action.

示例代码如下:
<action name="memberRegAction_*" class="memberAction"
method="{1}">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="token" />

<result name="input">/regsiter.jsp</result>
<result name="success">
/WEB-INF/jsp/member/regsucced.jsp
</result>
<!-- 重复提交后所要跳转的页面 -->
<result name="invalid.token">/error/error.jsp</result>
</action>
<action name="findMem_*" class="memberAction" method="{1}">
<result name="freemaker" type="freemarker">
/WEB-INF/template/jsp1.ftl
</result>
<result name="input">/regsiter.jsp</result>
<result name="success">
/WEB-INF/jsp/member/regsucced.jsp
</result>
</action>


以上是本人使用Struts2.1.6的心得,如果有哪些地方本人理解的不对,还请高手指点一下.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息