SSH框架整合,某一个action第一次请求可以执行,但是第二次就不行了

SSH框架整合,某一个action第一次请求可以执行,但是第二次就不行了

问题描述:

我的struts.xml配置如下

<!--?xml version="1.0" encoding="UTF-8" ?-->

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <package name="forum" namespace="/mok/forum" extends="default">
    <!-- 拦截器,暂时没什么用,这里先放着,到时候有需要的可以自己配 -->
        <interceptors>
            <interceptor name="myInterceptor" class="com.interceptor.MyInterceptor"></interceptor>
        </interceptors>
    
        <action name="login" class="loginAction" method="login">
            <result name="wrong" type="redirectAction">index</result>
            <result name="success" type="redirectAction">index</result>
        </action>
        <action name="loginOnly" class="loginAction" method="loginOnly">
            <result name="success">/mok/forum/login.jsp</result>
        </action>
        <action name="register" class="registerAction" method="register">
            <result name="success">/mok/forum/login.jsp</result>
            <result name="wrong">/mok/forum/register.jsp</result>
        </action>
        <action name="toRegister" class="registerAction" method="toRegister">
            <result name="success">/mok/forum/register.jsp</result>
        </action>
        <action name="index" method="index" class="forumAction">
            <result name="success">/mok/forum/index.jsp</result>
        </action>
        <action name="logout" method="logout" class="forumAction">
            <result name="success" type="redirectAction">index</result>
        </action>
        <action name="boardPostList" class="forumAction" method="boardPostList">
            <result name="success" >/mok/forum/spec_topics.jsp</result>
        </action>
        <action name="viewPost" class="forumAction" method="viewPost">
            <result name="success">/mok/forum/topic.jsp</result>
        </action>
        <action name="reply" class="replyAction" method="reply">
            <result name="success" type="redirectAction">viewPost?postId=${#request.postId}</result>
        </action>
        <action name="newPost" class="postAction" method="newPost">
            <result name="success">/mok/forum/post.jsp</result>
        </action>
        <action name="addNewPost" class="postAction" method="addNewPost">
            <result name="success" type="redirectAction">boardPostList?boardId=${#request.boardId}</result>
            <result name="wrong" type="redirectAction">newPost</result>
        </action>
        <action name="showEditPost" class="postAction" method="showEditPost">
          <result name="success">/mok/forum/editPost.jsp</result>
        </action>
        <action name="editPost" class="postAction" method="editPost">
          <result name="success" type="redirectAction">boardPostList?boardId=${#request.boardId}</result>
        </action>
        <action name="deletePost" class="postAction" method="deletePost">
          <result name="success" type="redirectAction">boardPostList?boardId=${#request.boardId}</result>
        </action>
        <action name="showAprioriTable" class="forumAprioriAction" method="showAprioriTable">
          <result name="success">/mok/forum/details.jsp</result>
        </action>
    </package>

</struts>

 出问题的action是addNewPost,deletePost,showEditPost,等等。。。比如请求了addNewPost之后,再次请求addNewPost,deletePost,showEditPost页面就出现如下错误:

这个是什么问题?已经困扰我很久了,马上要答辩了,急啊。。。
 

不知道你的spring action bean 是不是prototype的?

可能是用了postId=${#request.postId}的原因。
为什么用这种方式呢?参数不是都映射到action的属性吗,在action里面取属性不行吗

错误信息已经提示明显了,对于postaction没有定义的result。
把你的项目发上来,帮你调试一下。

postId

可能和action配置有关系,生命周期好短。。。。或者是上一次改变了result的值?应该不太会

执行addNewPost,deletePost,showEditPost后台没报错么?

是因为你跳转了之后,页面跑到另一个目录下面去了,所以你再点提交的时候,报404错误,你会发现你的action地址已经变了,你再看看你的提交的地址就会发现这个错误

[quote]但是我要把boardId参数传过去的啊。。不然那边拿不到还是要报错的[/quote]

改为正常的请求参数自动映射到action变量的方式不行么。

为什么非要选择这种传递方式呢?感觉后期应该很难维护啊。

访问action出错了,返回的逻辑地址为input action中没有配置input

strust2.x默认是多实例(prototype),每个请求都会产生相应的action实例去处理,但是spring整合后 就由spring管理bean 默认是单例模式,Action继承actionSupport会校验数据,如果转换出错,会找你要input视图,没配就出错找不到,.! ,如果继续访问该action还是会报错。因为是单例,上次的错误异常还在,因为没有清除,所以继续出错返回inpput,

可以给action加上
@Scope("prototype")
注解,不用单例