只是自己的想法,不对不要扔鸡蛋哦。
今天突发奇想的实现一个小小的cache。把分类categories放入map中,cache起来。
private void cache() {
if(log.isDebugEnabled()){
log.debug("Starting cache the categories");
}
cacheCategoryMap = new HashMap();
cacheCategoryMap.put("categories",categoryDao.getCategories());
}
然后我想在interceptor里面把categories写到ognlvaluestack里面这样我在ftl里面就可以<#list categories>....</#list>了。因为这个是在每个页面的header.ftl里面的。我也就不需要再每个action里面去get一下了。
刚开始我implements Interceptor
final OgnlValueStack stack = ActionContext.getContext().getValueStack();
stack.setValue("categories" ,categoryManager.getCategories());
return invocation.invoke();
可是这样也不可以。后来我想到是不是action执行完毕之后就把stack中的这个值清空了我又用了。AroundInterceptor 我想在after里面去设置不就可以了。
protected void after(ActionInvocation dispatcher, String result) throws Exception {
final OgnlValueStack stack = ActionContext.getContext().getValueStack();
stack.setValue("categories" ,categoryManager.getCategories());
}
可是这样还是不可以。我晕了。我想是不是要在action里面声明一下categories。
private List categories;
public List getCategories() {
return categories;
}
public void setCategories(List categories) {
this.categories = categories;
}
然后在before里面去get就可以了。
protected void before(ActionInvocation invocation) throws Exception {
final OgnlValueStack stack = ActionContext.getContext().getValueStack();
stack.setValue("categories" ,categoryManager.getCategories());
}
总算实现了。不过还要在每个action里面声明一下categories,这样还是很不好的。刚才有人建议用filter。我在试试吧.
http://leaf.jdk.cn/index.php/archives/91
分享到:
相关推荐
在源码中,ValueStack的实现类如OgnlValueStack,使用OGNL(Object-Graph Navigation Language)表达式语言来获取和设置栈中的对象属性,使得视图可以直接引用Action或模型中的数据。 除此之外,xwork-core还包含了...
LoginAction 和 LoginInterceptor 是两种常见的 Action 和 Interceptor,用于实现用户登录和身份验证。 Action Result 和 ActionChainResult 是两种结果对象,用于存储 Action 的执行结果和链式调用结果。EL...
在源码中,`com.opensymphony.xwork2.util.ValueStack`和`ognl.OgnlValueStack`是两个关键类。 6. **配置与容器** XWork使用XML配置文件定义Action和拦截器,同时依赖于一个容器(如Spring)来管理对象。`...
这种方法和第 1 种方法类似。动作类需要实现一个 org.apache.struts2.interceptor.RequestAware 接口。所不同的是,RequestAware 将获得一个 com.opensymphony.xwork2.util.OgnlValueStack 对象,这个对象可以获得 ...
7. **OgnlValueStack**:Struts2使用OGNL(Object-Graph Navigation Language)作为默认的表达式语言,OgnlValueStack是ValueStack的实现,提供OGNL表达式的解析和操作。 8. **ResultTypes**:Struts2支持多种...
此外,还涵盖了ResultType(结果类型)的使用、表达式语言EL和OGNL的介绍以及值堆栈(OgnlValueStack)的概念。WebWork的拦截器(Interceptor)框架和验证框架也是教程的重要内容,它们允许开发者在运行时添加额外的...
3. **ognl.OgnlValueStack**:这是OGNL表达式执行的核心类,负责对象属性的获取和设置。 4. **Interceptor栈**:深入理解如何配置和使用拦截器,以及它们在请求处理过程中的作用。 5. **Result类型**:研究如何...
`OgnlValueStack`是默认实现,使用OGNL表达式语言进行对象访问。 5. **Struts标签库**:提供了丰富的JSP标签,简化视图层的开发。例如,`s:textfield`用于创建输入字段,`s:submit`用于提交表单,`s:action`用于...
`com.opensymphony.xwork2.ognl`包下的OgnlValueStack和OgnlUtil等类,是Ognl在xwork2中的具体实现。 在异常处理方面,xwork2提供了ActionError和ActionException等类,用于处理和展示应用程序运行时出现的错误。...
`OgnlValueStack`使用OGNL(Object-Graph Navigation Language)表达式语言来获取和设置对象属性,提供了强大的数据访问能力。 4. **拦截器(Interceptor)** 拦截器是XWork的一大特色,它在动作执行前后插入...
1. **ValueStack内部结构**:`OgnlValueStack`是Struts2中用于存储和管理数据的关键组件。其内部包含了一个`CompoundRoot`对象,用于存放当前的Action对象,以及一个`Map, Object>`对象,用于存储各种上下文信息,如...
- 通过值堆栈(OgnlValueStack)来管理和操作数据。 - **Interceptor框架**: - Interceptor框架允许开发者编写自定义的拦截器来处理请求。 - 拦截器可以用来进行事务管理、性能监控、安全验证等功能。 - **验证...
OgnlValueStack stack = (OgnlValueStack) request.get("struts.valueStack"); response = (HttpServletResponse) stack.getContext().get("struts.servlet.response"); } } ``` 通过实现`RequestAware`接口,`...
3. **Interceptor(拦截器)**:拦截器是Struts2的核心特性,它允许在Action调用前后插入自定义的处理逻辑。常见的拦截器如Validation拦截器用于表单验证,SessionAware拦截器处理会话相关的操作。 4. **ValueStack...
- **OgnlValueStack**:是ValueStack的具体实现之一,它为OGNL提供了直接操作ValueStack的能力。 - **ActionContext和OgnlStackValue**:`ActionContext`和`OgnlStackValue`是Xwork中用于管理ValueStack和OGNL交互的...