博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2中,在使用 convention 插件的情况下,如何使用 “chain” 这个resu
阅读量:6229 次
发布时间:2019-06-21

本文共 2541 字,大约阅读时间需要 8 分钟。

hot3.png

执行完一个Action之后,一般就是跳转至某个JSP页面之类的,但在某些情况下,也有执行完一个Action之后需要跳转至另一个Action继续执行。

比如,使用 addUser 这个Action 新增一个用户之后,我们可能需要使用  userList  这个Action跳转至用户一览画面。

上面这种需求,在使用xml格式的配置文件时,是很容易配置的。所以,此处就不列出了。

此处想说一下,在使用 convention 插件的情况,如何通过 注解来实现。

基于注解方式,又分为两种情况:

 

第一种:  在 method 级别使用了 注解来指明该 method 是用来处理哪个  action 的,

这种情况下的写法,请参见:  

 

第二种:  不使用@Action注解去标注 method, 而是通过以 “!” 的方式去动态调用一个 method。下面以实例来说明一下:

@Results({        @Result(name = "listMajorKind", location = "/jsp/kind/major/list.jsp")        })public class KindAction {    public String queryMajorKind() {        return "listMajorKind";    }    public String addMajorKind() {        return "queryMajorKind";    }}

对于上面这段代码 ,在使用 convention 的前提下,我们知道:

 

“kind!queryMajorKind” 这个URL最终会跳转至 “/jsp/kind/major/list.jsp” 页面。

那对于“kind!addMajorKind” 这个URL,如果我也想让其最终跳转至上面这个JSP页面的话,应该怎么Result呢?

我先把配置贴出来吧,然后对着代码解释一下:

@Results({        @Result(name = "listMajorKind", location = "/jsp/kind/major/list.jsp"),        @Result(name = "queryMajorKind", type = "chain", params = { "namespace", "/", "actionName", "kind", "method", "queryMajorKind" })        })public class KindAction {    public String queryMajorKind() {        return "listMajorKind";    }    public String addMajorKind() {        return "queryMajorKind";    }}

细心的朋友已经注意到了,我多加了一行:

@Result(name = "queryMajorKind", type = "chain", params = { "namespace", "/", "actionName", "kind", "method", "queryMajorKind" })

这个配置的就跟 XML 格式的配置其实是一样的,其中:

 

  • “chain” 指定了这个 result的类型是去调用是另一个  action
  • 那么,这个action它的名字是什么,它的命名空间、动态调用的方法又是什么?该怎么设置呢?答案就是通过 params 这个参数来设置。对于params,可以看一下如下的API说明:
The parameters passed to the result. This is a list of strings that form a name/value pair chain since creating a Map for annotations is not possible. An example would be: {"key", "value", "key2", "value2"}.

那么,我们又如何知道应该往params中放入哪些参数呢?这个时候,就要去看代码了。

我们知道“chain”类型的result,它的处理类是“com.opensymphony.xwork2.ActionChainResult”,这个类的API说明里道出它需要哪些参数:

This result invokes an entire other action, complete with it's own interceptor stack and result. This result type takes the following parameters: ・actionName (default) - the name of the action that will be chained to ・namespace - used to determine which namespace the Action is in that we're chaining. If ・namespace is null, this defaults to the current namespace ・method - used to specify another method on target action to be invoked. If null, this defaults to execute method ・skipActions - (optional) the list of comma separated action names for the actions that could be chained to

看到这,应该明白上面的配置了吧。

转载于:https://my.oschina.net/crazybird/blog/691427

你可能感兴趣的文章
VS2010如何调试IIS上的网站
查看>>
iPhone 6/plus iOS Safari fieldset border 边框消失
查看>>
Xms Xmx PermSize MaxPermSize 区别
查看>>
【转】预装(push)lib64中so文件查找错误
查看>>
《Python简明教程》总结
查看>>
构造 - HDU 5402 Travelling Salesman Problem
查看>>
[转]图解分布式一致性协议Paxos
查看>>
【SSH2(实用文章)】--Struts2文件上传和下载的例子
查看>>
Rust初步(七):格式化
查看>>
微服务架构的设计模式
查看>>
【C++】继承时构造函数和析构函数
查看>>
python风味之大杂烩
查看>>
NSDate & NSDateFormatter
查看>>
android 点击屏幕关闭 软键盘
查看>>
相似图片搜索的原理(转)
查看>>
钟南山:高收入群体往往老得快
查看>>
Linux Kernel(Android) 加密算法汇总(三)-应用程序调用内核加密算法接口
查看>>
开发中三个经典的原则
查看>>
logging日志管理-将日志写入文件
查看>>
Hibernate 、Hql查询和Criteria查询
查看>>