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页面就出现如下错误:

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

wzu_xiaomai
小麦_comeon 感谢各位的回答,我的问题解决了。在action bean上加了 scope="prototype" 就可以了,再次谢谢大家的回答,祝你们好运!
6 年多之前 回复

10个回答

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

jinnianshilongnian
jinnianshilongnian
6 年多之前 回复
wzu_xiaomai
小麦_comeon 谢谢啊,加上这个就解决了。这是否就意味这action是多例了?
6 年多之前 回复
jinnianshilongnian
jinnianshilongnian 在你的 action bean上加上 scope="prototype"
6 年多之前 回复
wzu_xiaomai
小麦_comeon 那应该怎么改呢?
6 年多之前 回复
jinnianshilongnian
jinnianshilongnian 问题应该就处在这 因为第一次成功了 所以配置啥的都没问题 第二次失败了 估计数据冲突之类造成的
6 年多之前 回复
wzu_xiaomai
小麦_comeon 那我没加。。
6 年多之前 回复
jinnianshilongnian
jinnianshilongnian 你没加 就不是 需要<bean scope="prototype"> 否则就是singleton action必须prototype
6 年多之前 回复
wzu_xiaomai
小麦_comeon 这个怎么看是否是prototype的?
6 年多之前 回复

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

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

wzu_xiaomai
小麦_comeon 还是不行。。。
6 年多之前 回复
Dead_Knight
Dead_Knight 你把=${#request.boardId}的#号去掉
6 年多之前 回复
wzu_xiaomai
小麦_comeon 但是我要把boardId参数传过去的啊。。不然那边拿不到还是要报错的
6 年多之前 回复
Dead_Knight
Dead_Knight 那你就把boardPostList?boardId=${#request.boardId}改为:boardPostList
6 年多之前 回复
wzu_xiaomai
小麦_comeon jsp可以的。。
6 年多之前 回复
Dead_Knight
Dead_Knight 那你把deletePost的result改一下试试: <result name="success" type="redirectAction">boardPostList?boardId=${#request.boardId}</result> 这里改成跳转到一个jsp文件,看看可行
6 年多之前 回复
wzu_xiaomai
小麦_comeon 而且啊,第一次请求是可以的,第二次就不行了。。
6 年多之前 回复
wzu_xiaomai
小麦_comeon 不好意思这是毕业设计,而且是整个团队的我不好自作主张。你说的postaction没有定义result,从上面的配置文件看不是定义了么。。
6 年多之前 回复

postId

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

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

wzu_xiaomai
小麦_comeon com.interceptor.MyInterceptor这个没什么用的,就放在那里的。。
6 年多之前 回复
zyn010101
zyn010101 com.interceptor.MyInterceptor的代码能否贴一下?
6 年多之前 回复
zyn010101
zyn010101 com.interceptor.MyInterceptor是干什么用的?执行执行addNewPost,deletePost,showEditPost后boardPostList方法执行了没有?打断点试一下
6 年多之前 回复
wzu_xiaomai
小麦_comeon 后台没有报错。。。
6 年多之前 回复

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

wzu_xiaomai
小麦_comeon 这个地址如果第一次请求的话是可以的啊。。出现这个问题时的请求地址我复制下来之后重新启动服务器然后直接请求刚才的地址可以运行,但是一旦请求了addNewPost或者其他什么的,就不行了。
6 年多之前 回复

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

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

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

wzu_xiaomai
小麦_comeon 请求参数自动映射到action变量这个我在项目开始时没做好,所以现在只能值么传参数了。如果要做的话该如何配置?
6 年多之前 回复

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

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

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

wzu_xiaomai
小麦_comeon 你回答得好详细,而且让我豁然开朗 ,谢谢好心人。希望交个朋友哈!
6 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!