OGNL学习
来源:互联网 发布:淘宝商品点击排名 编辑:程序博客网 时间:2024/06/09 16:58
坚持每天写博文,积累下开发中的点点滴滴
什么是OGNL?
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,
它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。
功能比EL强的N倍.
OGNL仅仅只是一种表达式语言而已,使用它必须结合Struts2的标签.
讲解OGNL比先了解ValueStack(值栈),Struts2核心.
2.值栈是对应每一个请求对象的轻量级的内存数据中心。
(把一次请求相关的所有数据全部保存到ValueStack对象).
1.ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。
2.ValueStack贯穿整个Action的生命周期:每个Action类的实例都拥有一个ValueStack对象。 ValueStack相当于数据的中转站,在其中保存当前Action 对象和其他相关对象信息。
3.Struts2框架把ValueStack对象保存在名为“struts.valueStack”的request属性中。
request.setAttribute(“struts.valueStack”,vs);
3.ValueStack内部结构
ValueStack中存两个属性:
1.root:根, 类型 CompoundRoot,其本质是ArrayList.
2.context:上下文,类型是Map.
结构如右图:
如何去访问ValueStack中的数据:
若访问的是root里的数据,就直接访问.
若访问的是context里的数据,得使用.#
4.如何获得值栈对象
方式1:
ValueStack vs = (ValueStack)requets.getAttribute(“struts.valueStack”);
方式2:
ValueStack vs = ActionContext.getContext().getValueStack();
5使用ValueStack
action:
public class ValueStackAction extends ActionSupport{ private static final long serialVersionUID = 1L; @Override public String execute() throws Exception { //"struts.valueStack" //获取值栈(两种方法一样) ValueStack vs1 = (ValueStack)ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY); ValueStack vs2 = ActionContext.getContext().getValueStack(); System.out.println(vs1 == vs2); //向值栈中保存数据(针对root两种方式) vs2.push("first");//压在栈顶(索引为0) vs2.set("first", "first");//现在这个值在栈顶 /*vs2.getRoot().add(0,"first");第三种*/ return SUCCESS; }}
想在页面中获取值栈中的值要借助struts2的标签库,首先要引入标签库
<%@taglib uri="/struts-tags" prefix="s" %>
<body> valueStack.jsp <s:debug/> <!-- 取vs2.push("first");方法的值 --> <s:property value="[1].top"/> <!-- 取vs2.set("first", "first");方法的值 --> <s:property value="first"/></body>
这里只记录有这两个方法,实际开发一般不会这么做
一般的,我们只要在Action类中提供属性的访问方法(getXxx). 就会被自动压到栈顶.
class xxAction{} private User user; //属性user public User getUser() { return user; }}<s:property value="user.name"/><s:property value="user.age"/>${user.name}
Struts2支持使用EL表达式来获取信息. Struts2重新改写了EL获取属性的代码
但是不建议使用EL,如果请求中有跟值栈中重名的参数,EL会获取请求中的参数。
6.向值栈保存数据(主要针对contextt对象)两种方式:
ActionContext.getContext().getContextMap().put("xxx", "xxx");//简单方式ActionContext.getContext().put("yyy", "yyy");
建议往上下文里面存储数据
- Ognl学习
- OGNL学习
- OGNL学习(一)Ognl和OgnlContext
- Struts2 OGNL 学习
- OGNL框架学习(一)
- OGNL框架学习(二)
- OGNL学习笔记1
- struts2的ognl学习
- OGNL表达式语言学习
- Struts2 OGNL学习知识
- OGNL表达式语言学习
- struts2学习笔记----OGNL
- Struts-Tags学习ognl
- OGNL学习笔记
- OGNL学习笔记
- ognl案例学习
- OGNL表达式学习
- OGNL学习笔记
- KindEditor用法介绍
- 面向对象--this关键字
- JavaScript 相等和绝对相等(===)
- UDP套接字编程
- SpringMVC @ResponseBody处理流程
- OGNL学习
- 最简单的嵌入式Linux下ntp实现
- 皮尔逊相关度系数原理,以及java实现
- 解决科大讯飞11210错误
- 5.2
- 数组中的逆序对
- 机器学习学习笔记--迁移学习
- Java通过apache poi 读取excel(.xlsx)文件,并通过MyBbtis插入数据库中
- Android 7.0 高通平台原生Launcher3未读角标更新流程