我把传入OGNL的API的三个参数,称之为OGNL的三要素。OGNL的操作实际上就是围绕着这三个参数而进行的。
1. 表达式(Expression)
表达式是整个OGNL的核心,所有的OGNL操作都是针对表达式的解析后进行的。表达式会规定此次OGNL操作到底要干什么。
我们可以看到,在上面的测试中,name、department.name等都是表达式,表示取name或者department中的name的值。OGNL支持很多类型的表达式,之后我们会看到更多。
2. 根对象(Root Object)
根对象可以理解为OGNL的操作对象。在表达式规定了“干什么”以后,你还需要指定到底“对谁干”。
在上面的测试代码中,user就是根对象。这就意味着,我们需要对user这个对象去取name这个属性的值(对user这个对象去设置其中的department中的name属性值)。
3. 上下文环境(Context)
有了表达式和根对象,我们实际上已经可以使用OGNL的基本功能。例如,根据表达式对根对象进行取值或者设值工作。
不过实际上,在OGNL的内部,所有的操作都会在一个特定的环境中运行,这个环境就是OGNL的上下文环境(Context)。说得再明白一些,就是这个上下文环境(Context),将规定OGNL的操作“在哪里干”。
OGNL的上下文环境是一个Map结构,称之为OgnlContext。上面我们提到的根对象(Root Object),事实上也会被加入到上下文环境中去,并且这将作为一个特殊的变量进行处理,具体就表现为针对根对象(Root Object)的存取操作的表达式是不需要增加#符号进行区分的。
OgnlContext不仅提供了OGNL的运行环境。在这其中,我们还能设置一些自定义的parameter到Context中,以便我们在进行OGNL操作的时候能够方便的使用这些parameter。不过正如我们上面反复强调的,我们在访问这些parameter时,需要使用#作为前缀才能进行。
OGNL与模板
我们在尝试了OGNL的基本操作并了解了OGNL的三要素之后,或许很容易把OGNL的操作与模板联系起来进行比较。在很多方面,他们也的确有着相似之处。
对于模板,会有一些普通的输出元素,也有一些模板语言特殊的符号构成的元素,这些元素一旦与具体的Java对象融合起来,就会得到我们需要的输出结果。
而OGNL看起来也是非常的类似,OGNL中的表达式就雷同于模板语言的特殊符号,目的是针对某些Java对象进行存取。而OGNL与模板都将数据与展现分开,将数据放到某个特定的地方,具体来说,就是Java对象。只是OGNL与模板的语法结构不完全相同而已。
分享到:
相关推荐
### OGNL表达式及其三要素 #### OGNL简介 OGNL(Object-Graph Navigation Language),即对象图导航语言,是一种强大的表达式语言,专门用于处理Java对象。它允许开发人员以简洁的方式访问和修改对象的属性。OGNL...
##### 1.2 OGNL的三要素 - **表达式**:定义了如何获取或设置对象属性的规则。 - **OgnlContext上下文**:执行表达式的环境,包含变量和函数等。 - **Root根对象**:表达式解析的起点,通常是Action类实例或其他顶层...
#### 二、OGNL表达式的构成要素 OGNL表达式主要由以下几部分组成: 1. **表达式(Expression)**:是OGNL的核心组成部分,用来描述如何访问或修改对象的属性。例如,`department.name`表示获取名为`department`的...
由于提供的文件信息中内容部分是重复的网址,没有实际...以上是根据“精通Struts 2:Web 2.0开发实战”这一标题所能概括的知识点,这些知识点构成了掌握Struts 2框架的核心要素,并且在Web 2.0开发环境下具备实战意义。
SSH通常指的是Struts 2、Spring和Hibernate三个框架的组合,用于构建高效的企业级应用程序。 1. **Struts 2基础知识**: - Struts 2是基于MVC设计模式的Web应用框架,它由Webwork和Xwork框架合并发展而来。 - ...
在压缩包的"lib"目录下,你会发现所有必需的依赖库,这些都是Struts 2运行所依赖的第三方组件,如OGNL(Object-Graph Navigation Language)用于表达式语言,Freemarker或Velocity用于视图渲染,还有其他的一些日志...
- **OGNL(Object-Graph Navigation Language)**:用于在Action和视图之间传递数据的表达式语言。 2. **Hibernate 3 ORM**: - **实体类**:表示数据库表的Java类,通过注解或配置文件映射到数据库表。 - **...
总的来说,这个“Struts入门小程序”涵盖了Struts框架的基础要素,包括Action、ActionForm、配置文件、请求处理、数据验证、国际化、过滤器以及可能的Struts 2特性。通过深入学习和实践这些模块,开发者能够快速掌握...
#### 三、表达式语言 (EL) **3.1 表达式语言介绍** Spring Web Flow 支持两种主要的表达式语言:Unified EL 和 OGNL。 **3.2 支持的 EL 实现** - **Unified EL**:Spring 3.0 引入的标准表达式语言。 - **OGNL**...
4. **数据模型**:定义Java实体类来代表工资单中的各项要素,如员工信息(Employee)、工资项(SalaryComponent)、扣除项(Deduction)等。每个类包含相应的属性和方法,符合面向对象的设计原则。 5. **计算逻辑**...