三者之间的关系如下图所示:
Struts2框架把OGNL Context设置为我们的ActionContext。并且ValueStack作为OGNL的根对象。除ValueStack之外,Struts2框架还把代表application、session、request这些对象的Map对象也放到ActionContext中去。(这也就是Struts2建议在Action类中不要直接访问Servlet API的原因,他可以通过ActionContext对象来部分代替这些(Servlet API)功能,以方便对Action类进行测试!)
在Struts2中,采用标准命名的上下文(Context)来处理OGNL表达式。处理OGNL的顶级对象是一个Map(也叫context map),而OGNL在这个context中就是一个顶级对象(root)。在用法上,顶级对象的属性访问,是不需要任何标记前缀的。而其它非顶级的对象访问,需要使用#标记。
Action的实例,总是放到ValueStack中。因为Action放在Value Stack中,而ValueStack是root(根对象),所以对Action中的属性的访问就可以省略#标记。但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。
分享到:
相关推荐
ActionContext context = ActionContext.getContext(); ValueStack stack = context.getValueStack(); User user = new User("John", 30); stack.push(user); // 通过OGNL访问并修改User对象的属性 Map, ...
1. **通过ActionContext**: `ValueStack valueStack = ActionContext.getContext().getValueStack();` 2. **通过ServletActionContext**: `ValueStack valueStack = ServletActionContext.getValueStack...
ValueStack stack = ActionContext.getContext().getValueStack(); // 将对象压入栈顶 stack.push(new User("John", "Doe")); ``` - **取出数据**: ```java // 从栈顶取出对象 User user = (User) stack....
ValueStack stack = ActionContext.getContext().getValueStack(); Map, Object> context = new HashMap(); context.put("key1", "This is key1"); context.put("key2", "This is key2"); stack.push(context);...
ActionContext context = ActionContext.getContext_r(); Object attribute = super.getAttribute_r(name); // 尝试从request范围内获取值 if (context != null && attribute == null) { // 如果request范围内...
ActionContext context = ActionContext.getContext(); HttpServletResponse response = (HttpServletResponse) context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"); // 使用 response 对象...
精简全面讲解Struts 2.0Struts2产生背景 工作原理 实现步骤 标签 命名空间 转换器 国际化 输出 令牌机制 拦截器 表单校验(jQuery.validate验证框架) ...OGNL(ActionContext StackContext ValueStack区别)
Stack Context是ValueStack的一部分,它包含了一些上下文相关的数据,如ActionContext,提供了对请求、响应、session、应用上下文的访问。 11. **Action总结** Action是Struts2的主要业务逻辑载体,它负责处理...
默认情况下,Struts2通过Action上下文(ActionContext)的ValueStack来查找对应的转换器。如果找不到内置的转换器,我们就可以提供自定义的转换器。 自定义转换类需要继承Struts2提供的`org.apache.struts2.util....
获取到参数后,拦截器会创建一个Map对象(contextMap)来保存ActionContext中的context Map,即OgnlContext对象,然后通过ac.getValueStack()获取ValueStack。ValueStack是OGNL(Object-Graph Navigation Language)...