基于注解的struts action跳转 @Result 跳转到另一个action

基于注解的struts action跳转 @Result 跳转到另一个action   |

初学ssh 基于注解的方式简单灵活,但是做一个例子的时候,添加用户AddUser 完成后 想页面跳转到 ListUser 这个action,

然后action 成功后 会跳转到list.jsp 显示 所以用户信息,

 发现  网上几乎所有例子都是 @Result  成功跳转到一个jsp ,不成功跳转到另一个jsp

@Action(value="studentAdd",results={

             @Result(name="success",location="/usersuc.jsp"),

             @Result(name="error",location="/usererror.jsp")
 })

那么如果 成功跳转到另一action个 怎么写呢,搜了半天 也没有想要的答案

就自己尝试

@Action(value="studentAdd",results={

            @Result(name="success",location="/StudentList.action"),

            @Result(name="error",location="/error.jsp")
})  这是错的 ,tomcat启动时 直接就报错  Exception starting filter struts2  , Unable to load configuration. - [unknown location]

如果不加 .action 后缀

@Action(value="studentAdd",results={

      @Result(name="success",location="/StudentList"),

      @Result(name="error",location="/error.jsp")
})  这样虽然tomcat启动时不报错,但是添加用户页面成功 不成功会显示404错误 找不到action

偶然在一片文章中 看到

struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)

dispatcher 为默认跳转类型,用于返回一个视图资源(如:jsp) 
Xml代码 :

<result name="success">/main.jsp</result> 
<result name="success">/main.jsp</result> 
以上写法使用了两个默认,其完整的写法为: 
<result name="success" type="dispatcher"> 
<param name="location">/maini.jsp</param> 
</result>

用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
location只能是页面,不能是另一个action(可用type="chain"解决)。

redirect 类型用于重定向到一个页面,另一个action或一个网址。 
Xml代码:

<result name="success" type="redirect">aaa.jsp</result> 
<result name="success" type="redirect">bbb.action</result> 
<result name="success" type="redirect">www.baidu.com</result>

缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。
所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。

处理方法:

(方法一): 
<result name="topic" type="redirect">/topicAction!findTopics.do?topicId=${topicId}</result> 
(方法二): 
<result name="topic" type="redirect-action"> 
<param name="actionName">findTopics</param> 
<param name="topicId">${topicId}</param> 
</result>

redirect-action 结果类型使用ActionMapperFactory提供的ActionMapper来重定向请求到另外一个action 
Xml代码:

<result name="err" type="redirect-action"> 
<param name="actionName">重定向的Action名</param> 
<param name="namespace">重定向Action所在的名字空间</param> 
</result> 
redirect和redirect-action两种结果类型在使用上其实并没有什么区别,只是写法不同而已。

chain 用于把相关的几个action连接起来,共同完成一个功能。 
Xml代码:

<action name="step1" class="test.Step1Action"> 
<result name="success" type="chain">step2.action</result> 
</action> 
<action name="step2" class="test.Step2Action"> 
<result name="success">finish.jsp</result> 
</action> 
处于chain中的action属于同一个http请求,共享一个ActionContext 


plaintextj 结果类型用于直接在页面上显示源代码

Xml代码:

<result name="err" type="plaintext"> 
<param name="location">具体的位置</param> 
<param name="charSet">字符规范(如GBK)</param> 
</result>


既然这样 制定跳转类型 是不是就可以了呢, 找下面来写 果然就OK了

@Action(value="studentAdd",results={

         @Result(name="success",type="chain",location="studentList")})
         @Result(name="error",location="/usererror.jsp")
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值