ognl:
对象图导航语言,表达式;el表达式:获取域对象中的值。
在Struts2中主要用来获取值栈中的内容。ognl不是Struts2中的一部分,它是完全独立存在的,如果想使用ognl需要导入ognl的jar包。
实现功能:
1、支持对象方法调用,如xxx.doSomeSpecial();
2、支持类静态的方法调用和值访问,表达式的格式:
@[类全名(包括包路径)]@[方法名 | ?值名],例如:
@java.lang.String@format('foo %s', 'bar')
或@tutorial.MyConstant@APP_NAME;
静态类方法调用时需要进行常量的设置:<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
3、访问OGNL上下文(OGNL context)和ActionContext;
4、支持赋值操作和表达式串联,如price=100, discount=0.8,
calculatePrice(),这个表达式会返回80;
5、操作集合对象。
值栈:数据的一个中转站。
servlet和action的区别:
servlet:在第一次访问的时候创建一次,只有一个实例(线程安全)。
action:在访问的时候创建,每次访问都要创建新的action实例,每个实例里面都有一个值栈对象:valueStack。
值栈保存位置:
1)、在action中;2)、在request域中:request.setAttribute("struts.valueStack",valueStack);
获取值栈:
1)、域对象:
ValueStack valueStack = (ValueStack)ServletActionContext.getRequest().getAttribute("struts.valueStack");
ValueStack valueStack2 = ActionContext.getContext().getValueStack();
值栈结构:
有两部分组成
(1)root -- list集合
数据默认存在root里面
(2)context -- map集合
root引用
三个域对象
attr
parameters
(3)采用栈:后进先出
(4)获取值栈的context里面使用ognl时候添加#
向ognl中设置值:
1)、valueStack.set("key","value");2)、valueStack.put("value");
获取域对象、集合中的值:
request:<s:property value="#request.username"/>
session:<s:property value="#session.username"/>
application:<s:property value="#application.username"/>
attr:<s:property value="#attr.username"/>
parameters:<s:property value="#parameters.cid"/>
<s:property value="#request.list[1].username"/>
<s:property value="#request.list[1].password"/>
为什么el能获取值栈内容:
(1)增强request里面getAttribute方法
(2)在这个方法中,从域对象里面获取值,如果得不到,从值栈里面获取值,放到域对象里面
ognl的使用:
#号的使用:
(1)#获取是值栈context内容
用法一 # 获取context的数据
request:<s:property value="#request.username"/>
session:<s:property value="#session.username"/>
application:<s:property value="#application.username"/>
attr:<s:property value="#attr.username"/>
parameters:<s:property value="#parameters.cid"/>
用法二 条件的判断(进行投影映射)
(2)使用struts2的标签 <s:iterator>:遍历集合内容,类似与jstl里面 forEach标签
(3)使用iterator标签遍历值栈list集合
(4)代码
<!-- 获取值栈的list的值 -->
<s:property value="list[0].username"/>
<!-- 第一种写法 -->
<s:iterator value="list">
<s:property value="username"/>
</s:iterator>
<!-- 第二种写法 -->
<hr/>
<!-- 添加属性var表示: 在context创建值user -->
<s:iterator value="list" var="user">
<s:property value="#user.username"/> -- <s:property value="#user.password"/>
<br/>
</s:iterator>
(5)获取值栈list集合中某一个值
<!-- 获取值栈list里面的username的值 -->
<!-- puser在context里面创建值,这个值是每次遍历username的内容-->
<s:iterator value="list.{username}" var="puser">
<s:property value="#puser"/>
</s:iterator>
(6)ognl条件判断
<!-- 获取值栈的list的值,进行条件判断
获取list里面person对象中age大于20的信息
-->
<s:iterator value="list.{?#this.age>20}" var="person">
<s:property value="#person.pname"/> -- <s:property value="#person.age"/>
<br/>
</s:iterator>
#构建集合:
<!-- 使用ognl构建 list集合 -->
<s:iterator value="{'aa','bb','cc'}" var="list">
<s:property value="#list"/>
</s:iterator>
<!-- 使用ognl构建 map集合 -->
<s:iterator value="#{'ww':'WW','aa':'AA','pp':'PP'}" var="map">
<s:property value="#map.key"/> --- <s:property value="#map.value"/>
</s:iterator>
%号的使用:
类似于HTML中的表单的<input type="text"/>;
把当前内容作为ognl表达式使用:<s:textfield value="%{#request.msgname}"></s:textfield>;
如果就想把内容作为字符串使用:不写%{}或者加单引号<s:textfield value="%{'#request.msgname'}"></s:textfield>
$号的使用:
1)、用在国际化资源文件中,引用ognl表达式
在properties文件中,name=${\request.msgname}。
在页面中<!-- 获取国际化里面的内容 -->
<s:text name="namekey"></s:text>
2)、在Struts2配置文件中,引用ognl表达式,需要在action中设置set方法
相关推荐
camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Apache Struts2框架的核心组成部分,也被许多其他Java应用和框架广泛使用,如Spring WebFlow。在Java世界中,...
赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象属性,它在Struts2的核心组件中扮演着至关重要的角色。本篇文章将深入探讨OGNL在Struts2.0中的应用及其重要性。 ...
标题中的“ognl.jar(ognl-2.6.11.jar)”指的是OGNL(Object-Graph Navigation Language)的特定版本,这是一个开源表达式语言,主要用于Java应用程序,它允许程序动态地访问和修改对象的属性。这个版本是2.6.11,表明...
OGNL特有的对象索引属性(Object Indexed Properties) 调用方法 变量引用 带括号的表达式 子表达式(Subexpressions)链 构造集合(Collection) 列表(Lists) 数组 映射表(Maps) 对集合的投影(Project) 在集合...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于Spring框架和其他许多Java应用中,用于数据绑定和表达式评估。本篇将详细介绍OGNL的使用方法及其...
**ognl-2.6.11.jar 官方源码详解** OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它被广泛应用于许多Java框架,如Struts2,因为它允许动态地访问和操作对象的...
其中,OGNL(Object-Graph Navigation Language)是Struts2中的核心表达语言,用于在视图层与模型层之间传递数据。在深入理解OGNL的源码之前,我们首先需要了解OGNL的基本概念和用法。 OGNL是一种强大的表达式语言...
### OGNL表达式的理解和应用 #### 一、OGNL简介与基本概念 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架中的默认表达式语言,同时也被广泛...
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
**OGNL(Object-Graph Navigation Language)**是一种强大的表达式语言,主要用于获取和设置Java对象的属性。在Java开发中,尤其是Web应用框架如Struts2和Hibernate中,OGNL被广泛使用。它允许开发者以简洁的方式...
OGNL,全称Object-Graph Navigation Language,是一种强大的表达式语言,主要用来获取和设置Java对象的属性。它的设计初衷是解决UI组件和控制器之间的数据绑定问题,使得视图和控制器之间的交互更为简便。随着时间的...
OGNL,全称为Object-Graph Navigation Language,是一种强大的开源表达式语言,主要用于便捷地操作对象的属性和方法。在Struts2框架中,OGNL作为默认的表达式语言发挥着核心作用,允许开发者以简洁的方式访问和修改...
标题中的“ognl-3.0.21.jar”和“ognl.jar”是指OGNL(Object-Graph Navigation Language)的特定版本库文件。OGNL是一种强大的表达式语言,广泛用于Java应用程序,尤其是Web开发框架如Struts 2中,用于在模型、视图...
开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用,特别是Struts2框架中,用于数据绑定和动态方法调用。在这个压缩包中,包含的是OGNL的源码和帮助文档,这对于深入理解OGNL的工作...
OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是与Struts2框架一起使用。它允许程序开发者通过简洁的语法来访问和操作对象的属性,执行复杂的逻辑,以及动态地构建...
OGNL(Object-Graph Navigation Language)是Struts2框架中常用的一种表达式语言,用于在视图层方便地访问和操作模型数据。本篇笔记主要介绍了在Struts2中使用OGNL的一些基本用法。 首先,OGNL可以用来获取不同范围...