java吧 关注:1,232,472贴子:12,699,244
  • 5回复贴,共1

求救:关于struts2 action之间跳转的问题!

只看楼主收藏回复

首先有一个test.jsp页面,和两个action,假如说是A.action和B.action。
test.jsp页面中有一个超链接<a href="A.action?username='zhangsan'" >aa</a>,点击后转到A.action页面,同时传递一个username参数,这儿username='zhangsan';A.action收到这个username后将username设置为'lisi',然后<result name="success" type="chain">转发到B.action,B.action不做任何处理,直接返回success到testResult.jsp页面,这个页面输出username的值,但是做实验显示username的值还是为'zhangsan',就没有改变,怎么回事啊?


1楼2013-05-30 21:37回复
    没有人愿意帮忙吗?求救啊!!!!!我该如何将改变了的username值传递给返回页面呢?


    2楼2013-05-30 22:04
    回复
      确实是这么个情况,转发不是用原来的url重新请求一遍吗?当你在A这个action修改username的值之后还是使用原来的url请求,所以username不会改变,不知道理解的对不对?


      3楼2013-05-30 22:26
      收起回复
        type=chain,第2个action会接收2次username,第一次是A.action传递过来的李四,第2次是超链接中的zhangsan,无论中间传递多少个action,最终都会被超链接的覆盖掉,你可以吧type设置成redirectAction,在设置参数<param name="username">${username}</param>


        IP属地:陕西4楼2013-05-30 22:54
        回复
          首先传值的改变最好不用type="chain"。
          这个属于串联Action实现一个功能。
          你往A.action传username='zhangsan' 本来不采用type="chain"
          这时候转发的时候必须是b.action?username=${username}。这样带参数。
          转发并且type是为redirect 或者是 redirectAction 。

          不然参数传不过去。因为type="chain"。所以可以省略?username=${username}。
          但是你恰好是type=chain。所以应该是你传入到第一个a.action中的值。
          建议:1把type=chain。改成type=redirect。并且带?username=${username}。
          2.保留type=chain。带入?username=${username}。
          很久不碰这些东西了。原理基本上都是猜测的。而且我基本上没用过type=chain。
          这种链式的传递参数。
          你要是用。
          <result name="success" type="redirect">b.action?username=${username}</result>。
          这样肯定是可以实现你要的功能的。


          本楼含有高级字体5楼2013-05-30 23:47
          回复