因为在项目中有一部分功能的设计看上去和命令模式比较像,因此,特意研究了下XWork。
XWork号称是通用,可重用以及可扩展的命令模式的框架。主要牵涉到的类就是
Action:命令接口,Action的返回结果就是String类型,其实是代表Action的执行状态,是成功了,还是失败了。
ActionInvocation:命令的调用者(Action和ActionInvocation分开,是典型的Command模式)
ActionContext:和ActionInvocation相关的命令的上下文,一般就是执行这个命令所需要的一些参数对象。如果f(x,y)可以表示命令的话,那么x,y就是这里的ActionContext的值:),不知道理解得对不对。我看源代码
[code]public class ActionContext implements Serializable {
static ThreadLocal actionContext = new ActionContextThreadLocal();
public static final String SESSION = "com.opensymphony.xwork.ActionContext.session";
...
private static class ActionContextThreadLocal extends ThreadLocal {
protected Object initialValue() {
OgnlValueStack vs = new OgnlValueStack();
return new ActionContext(vs.getContext());
}
}
[/code]
ActionContext包含了很多将请求的信息转换为内部Map来存储。
Result:表示执行结果,和ActionInvoation相关联,是和后面View的实现相关联的。
我比较疑惑的是,这里的Result是接口,和后续的处理相关联。那实际Action执行之后得到的数据在什么地方?都放在ActionContext当中去了?
如果是的话,命令的输入参数由ActionContext来表示,执行动作后的输出参数也放在ActionContext中了,如何做到的。
非常疑惑。我特别想将请求参数和输出结果分开,搞不懂。
XWork号称是通用,可重用以及可扩展的命令模式的框架。主要牵涉到的类就是
Action:命令接口,Action的返回结果就是String类型,其实是代表Action的执行状态,是成功了,还是失败了。
ActionInvocation:命令的调用者(Action和ActionInvocation分开,是典型的Command模式)
ActionContext:和ActionInvocation相关的命令的上下文,一般就是执行这个命令所需要的一些参数对象。如果f(x,y)可以表示命令的话,那么x,y就是这里的ActionContext的值:),不知道理解得对不对。我看源代码
[code]public class ActionContext implements Serializable {
static ThreadLocal actionContext = new ActionContextThreadLocal();
public static final String SESSION = "com.opensymphony.xwork.ActionContext.session";
...
private static class ActionContextThreadLocal extends ThreadLocal {
protected Object initialValue() {
OgnlValueStack vs = new OgnlValueStack();
return new ActionContext(vs.getContext());
}
}
[/code]
ActionContext包含了很多将请求的信息转换为内部Map来存储。
Result:表示执行结果,和ActionInvoation相关联,是和后面View的实现相关联的。
我比较疑惑的是,这里的Result是接口,和后续的处理相关联。那实际Action执行之后得到的数据在什么地方?都放在ActionContext当中去了?
如果是的话,命令的输入参数由ActionContext来表示,执行动作后的输出参数也放在ActionContext中了,如何做到的。
非常疑惑。我特别想将请求参数和输出结果分开,搞不懂。