OGNL(Object Graph Navigation Language )在Struts2.0中得到了普遍的应用,我们经常用它来访问Action中的properties,下面是一些常见的例子:
<s:property value="#session.mySessionPropKey"/>
<s:select label="label" name="name" list="{'name1','name2','name3'}" value="%{'name2'}" />
<s:if test="'foo' in {'foo','bar'}">
muhahaha
</s:if>
<s:else>
boo
</s:else>
其中我们用的比较复杂的应该就是一些属性之间的包含和父子关系了,还有就是我们用到的比较多的#取值符号和%{}值运算符号。
实际工作过程中,遇到如下一个比较抽象的问题,把这里的经验分享给大家。先看下面的一段代码:
<s:iterator status="stat" value="destObjects">
<tr>
<s:iterator value="visibleColumns">
<td>
<s:property value="destObjects[%{#stat.index}].%{fieldDefName}" />
</td>
</s:iterator>
</tr>
</s:iterator>
这里的destObjects是一个List变量,里面包含有多个DestObject对象;visibleColumns也是许多个VisibleColumn对象的List集合,VisibleColumn拥有一个重要的属性fieldDefName,表达式"VisibleColumn.fieldDefName"的值又是DestObject的一个属性名称。
这里的关系比较混乱,不过仔细看看,应该就能明白其中的关系。这种模型也是我们在日常数据库结构设计中常常用到的,即一个定义表用来描述所有字段性质,而这些字段事实上又组成了一张或多张实用表。
通过以上Struts页面代码,我却得不到任何结果。为了寻找最终的解决途径,我查询了多方面的资料,也试过了许多种方式,比如:
<s:property value="destObjects[%{#stat.index}].%{fieldDefName}" />
<!-- OR -->
<s:property value="%{destObjects[#stat.index].%{fieldDefName}}" />
<!-- OR -->
<s:property value="%{fieldDefName}" />
<!-- OR -->
<s:iterator value="destObjects" id="do">
<s:iterator value="visibleColumns" id="vc">
<s:property value="#do.%{vc.fieldDefName}"/>
</s:iterator>
</s:iterator>
可惜,一切都是徒劳。OGNL是一个比较抽象混杂的语言,有时候多一个%或者#可能意义就不一样了。
最后给出一个正解,在我看来只是一个"["符号的作用,却改变了输出的结果:
<s:iterator id="do" value="destObjects">
<tr>
<s:iterator value="visibleColumns">
<td>
<s:property value="%{#do[fieldDefName]}"/>
</td>
</s:iterator>
</tr>
</s:iterator>
分享到:
相关推荐
OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科OGNL百度百科
ognl表达式 ognl表达式 ognl表达式 ognl表达式
开发工具 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...
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源码 ognl源码 ognl源码 ognl源码 ognl源码
是关于OGNL语言的中文资料,要的请下载
关于OGNL表达式的使用的整理以及提供的文档说明,ps:文档说明是英文的,可能需要翻译
ognl.jar ognl.jar
OGNL 最初是为了能够使用对象的属性名来建立 UI 组件 (component) 和 控制器 (controllers) 之间的联系,简单来说就是:视图 与 控制器 之间数据的联系。后来为了应付更加复杂的数据关系,Drew Davidson 发明了一个...
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
ognl ognl 文件
赠送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文档-...
赠送jar包:ognl-3.1.12.jar; 赠送原API文档:ognl-3.1.12-javadoc.jar; 赠送源代码:ognl-3.1.12-sources.jar; 赠送Maven依赖信息文件:ognl-3.1.12.pom; 包含翻译后的API文档:ognl-3.1.12-javadoc-API文档-...
OGNL2.6.9-API
基于WebWork核心的MVC开发与实践(ognl这一章)
ognl的两个版本的jar包,分别是 ognl-3.0.14.jar ognl-3.0.21.jar 有需要的可以下载一下
JS:ognl表达式 JS:ognl表达式 JS:ognl表达式
赠送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文档-...
OGNL特有的对象索引属性(Object Indexed Properties) 调用方法 变量引用 带括号的表达式 子表达式(Subexpressions)链 构造集合(Collection) 列表(Lists) 数组 映射表(Maps) 对集合的投影(Project) 在集合...
ognl-2.6.11.jar 源码 ognl-2.6.11.jar 源码