struts2 的 @Result 和 @ResultPath 联合使用

本文介绍如何使用Struts2的Convention插件来配置默认的Result视图路径,并通过示例展示了如何使用@ResultPath注解进行个性化设置。

对于使用了 struts2 的 convention 插件进行开发时,我们知道可以通过以下的配置项来约定所有的 Result 视图的路径:

Xml代码   收藏代码
  1. <constant name="struts.convention.result.path" value="/WEB-INF/content/"/>  

 上面的value就是 convention 插件 中的默认值,当然,我们可以改成任意我们想要的值。

这样的话,当我们声明以下的@Result时:

Java代码   收藏代码
  1. @Result(name = "success", location = "my-upload.jsp")  

 系统就会试着去访问如下的文件:

Txt代码   收藏代码
  1. /WEB-INF/content/my-upload.jsp  

 如果存在,那就OK,不然就会报404的错误。

 

对于result path,我也可以使用@ResultPath进行个别定制,如:

Java代码   收藏代码
  1. @Results(@Result(name = "success", location = "my-upload.jsp"))  
  2. @ResultPath("/jsp")  
  3. public class File2Action {  
  4.   
  5.     public String upload() {  
  6.         System.out.println("uploading files...");  
  7.         return "success";  
  8.     }  
  9. }  

 这样一来,虽然“struts.convention.result.path”的值为“/WEB-INF/content/”,但是我们这边使用了@ResultPath 注解对其进行了覆盖,所以,这边实际访问的页面为:

Txt代码   收藏代码
  1. /jsp/my-upload.jsp  

 

PS:以上的结果,均以“Action”的namespace为“/”  为前提,即url应该以如下这种情况的:

Url代码   收藏代码
  1. http://xxx.xxx.xxx.xxx:port/web工程名/file2!upload  

 对于action的namespace怎么设定,大家查看一下官网说明:http://struts.apache.org/docs/convention-plugin.html#ConventionPlugin-Codebehindhelloworld

 

不过,有一点,我们需要特别注意:

上面的

Txt代码   收藏代码
  1. location = "my-upload.jsp"  

 中,“my-upload.jsp” 没有以 “/” 开头,所以,也就是说它是一个相对路径,这样,它才会基于@ResultPath中的路径去找相应的文件。

如果,我们将其修改成如下:

Txt代码   收藏代码
  1. location = "/my-upload.jsp"  

 即,让“my-upload.jsp”以"/"开头,这时候,它就是一个绝对路径,这个时候,它不是会基于@ResultPath中的路径去搜索相关的文件的,而是直接基于web工程的根路径去搜索相关文件。

也就是说,假设你的web工程的名字就 test,那么此时它访问的页面为:

Url代码   收藏代码
  1. http://xxx.xxx.xxx.xxx:port/test/my-upload.jsp  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值