1. 一、OGNL Object Graph Navigation Language
a.普通
<li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
<li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
<li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
<li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
<li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
<li>访问值栈中action的普通方法:<s:property value="m()" /></li>
b.访问静态
<li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
<li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
<li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
使用struts 2.1时,要访问到静态方法就必须在struts.xml中配 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
可以参考struts2-core-2.1.6.jar包下的,org.apache.struts2里面的default.prperties
c.访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
d.访问List
<li>访问List:<s:property value="users"/></li>
<li>访问List中某个元素:<s:property value="users[1]"/></li>
<li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li> 大括号可以表示集合
<li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
e.Set
<li>访问Set:<s:property value="dogs"/></li>
<li>访问Set中某个元素:<s:property value="dogs[1]"/></li> 访问不到,因为Set没有顺序
<li>访问Map:<s:property value="dogMap"/></li>
<li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
f.Map
<li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
<li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
<li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
g.投影
<li>投影(过滤):<s:property value="users.{?#this.age==1}</li> 取到的是一个集合
<li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li> 问号代表过滤条件
<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li> ^表示开始
<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li> $表示结尾
<li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
二、Struts2-Tags
a.property
<li>property: <s:property value="username"/> </li>
<li>property 取值为字符串: <s:property value="'username'"/> </li>
<li>property 设定默认值: <s:property value="admin" default="管理员"/> </li> 如果有admin就有,没有就用默认值
<li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li> 是否解析HTML,默认TRUE <hr/>一条横线
<li>property 设定HTML: <s:property value="'<hr/>'"/> </li>
b.set
<li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>
<li>set 使用#取值: <s:property value="#adminPassword"/> </li>
<li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>
c.bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog"> 必须要有var,否则不能存放到Struts Context
<s:param name="name" value="'oudy'"></s:param> 必须加单引号,否则访问不到。加了,表示是一个字符串
<s:property value="name"/> 可以通过property 对其进行访问,如果没有var则不能在bean外访问到,原因bean一结束,就会从栈里取走。
</s:bean>
拿出值:<s:property value="#myDog.name"/>
d.include 不常用
<li>include _include1.html 包含静态英文文件
<s:include value="/_include1.html"></s:include>
</li>
<li>include _include2.html 包含静态中文文件
<s:include value="/_include2.html"></s:include>
</li>
<li>include _include1.html 包含静态英文文件,说明%用法
<s:set var="incPage" value="'/_include1.html'" />
<!--<s:set var="incPage" value="%{'/_include1.html'}" />-->
<s:include value="%{#incPage}"></s:include> %{}表示将里面的东西按OGNL表达式处理。
</li>
e.if elseif else
age = <s:property value="#parameters.age[0]" /> <br />
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age!</s:if>
<s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>
<s:else>yeah!</s:else><br />
<s:if test="#parameters.aaa == null">null</s:if>
</li>
f.iterator
<li>遍历集合:<br />
<s:iterator value="{1, 2, 3}" >
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x"> 定义变量
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
</li>
<li>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" > 定义Map时要加一个#
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>
<!--EndFragment-->
相关推荐
本篇文档将详细介绍ONGL在访问上下文、集合操作以及构造Map等方面的使用方法,以及如何解决在使用过程中可能遇到的问题。 **一、访问OGNL上下文和Action上下文** 1. **#parameters**: OGNL提供了一个便捷的方式,...
**ONGL在Java应用中的使用** 在Java应用中,ONGL通常通过一个解析器来解析和执行表达式。以下是一个简单的示例: ```java import ognl.Ognl; import ognl.OgnlContext; import ognl.OgnlException; public class ...
**ongl源代码详解** ongl,全称Object-Notation for Graphic Language,是一种用于创建图形用户界面(GUI)的表达式语言,尤其在Java应用中常见。它结合了Struts2.0框架,提供了强大的模板引擎功能,使得开发者能够...
ONGL(Object-NGram Language)表达式是一种在Java Web开发框架Struts中广泛使用的模板语言,主要用于视图层的构建。它允许开发者在JSP页面中嵌入Java代码,实现动态内容渲染。StrutsInterface可能是指与Struts框架...
6. **开发实践**: 使用`ongl`通常涉及到集成到现有的Java项目中,可能需要配置构建工具(如Maven或Gradle),设置依赖,并编写使用`ongl`的Java代码。 7. **调试技巧**: 当处理`ongl`表达式时,可能会遇到解析错误...
这个压缩包包含了Struts2中的ONGL包源码,对于理解Struts2的工作原理和深入学习OGNL的使用非常有帮助。 OGNL是Object-Graph Navigation Language的缩写,它的主要功能是在对象图中导航并执行操作。在Struts2中,...
### Struts2中OGNL表达式的使用与具体实例解析 #### 一、OGNL概述 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性值。它广泛应用于Struts2框架中,用于简化...
**ONGL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在Java应用程序中操作对象图。它在Web开发领域,特别是在Struts2框架中,被广泛用来简化视图层的逻辑,允许开发者通过简洁的表达式来访问和...
- **独立使用**:ONGL也可单独作为工具库,用于在任何Java程序中执行动态表达式。 通过研究jkuhnert-ognl-1483b9a的源代码,你可以深入理解ONGL的内部实现,学习如何构建和执行表达式,以及如何处理对象图的各种...
ONGL表达式,不解释,需要的就下吧,很全面的一份资料,看了就知道了
例如,在提供的代码片段中,可以看到`<%@ taglib prefix="s" uri="/struts-tags"%>`引入了Struts2的标签库,这使得在JSP中可以方便地使用OGNL表达式来操作页面上的Java对象。 ```jsp ("sex", Sex.MALE); %> This ...
### JSTL、EL、ONGNL、Struts标签的区别与使用 #### 一、JSTL (JavaServer Pages Standard Tag Library) **定义**: JSTL 是一个由一系列标准标签组成的集合,这些标签可以帮助开发者简化 JavaServer Pages (JSP) ...
4. 使用WinCVS下载ONGL源码:WinCVS是一款图形化的CVS(Concurrent Versions System)客户端,用于版本控制。通过WinCVS,开发者可以检出ONGL的源代码仓库,进行代码浏览、编辑、提交等操作。这有助于理解ONGL的工作...
通过使用ONGL,开发者可以避免直接操作底层图形库的复杂性,而是通过更高级别的抽象来创建交互式和动态的视觉体验。 源代码通常包含以下几个关键部分: 1. **解析器**:这部分代码负责将ONGL的语法转换为可执行的...
通过这种方式,我们可以方便地在视图层使用OGNL表达式来展示模型对象的信息,无需编写复杂的Java代码来处理数据的获取和展示。 **小结** OGNL是Struts 2框架中的一项关键技术,它简化了视图层与模型层之间的交互,...
很好的介绍ONGL的相关知识,一看就明白,对想学习struts2或ONGL的人来说是必需的
**ONGL源码详解** ONGL (Object-Graph Navigation Language...总的来说,最新的ONGL源码提供了深入学习和研究的机会,结合unittest代码,开发者可以全面了解其工作原理,并提升在Java应用开发中的表达式语言使用技巧。
本篇文章将深入解析如何在Struts框架中基础使用ONGNL表达式。 首先,我们需要理解OGNL的基本概念。OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性以及调用方法。它可以遍历对象图...
本工程"ongl.rar"显然是一个使用Struts2框架进行开发的项目压缩包,包含了必要的源代码和配置文件。以下是关于Struts2开发的一些关键知识点: 1. **Struts2框架核心组件**: - **Action类**:是业务逻辑的载体,...
可以分两个阶段执行:首先解析表达式为内部形式,然后使用该内部形式设置或获取属性值;或者在单个阶段内直接使用字符串形式的表达式来设置或获取属性值。虽然直接使用字符串形式更为简便,但为了提高效率,推荐先...