Struts2中OGNL表达式的使用详解

4星 · 超过85%的资源 需积分: 16 5 下载量 173 浏览量 更新于2024-09-17 1 收藏 18KB TXT 举报
"本文主要介绍了OGNL(Object-Graph Navigation Language),一种强大的表达式语言,常用于Struts 2框架中。文中详细讲解了OGNL的使用方式,包括访问上下文对象、操作ValueStack、创建集合对象以及在集合中查找对象等核心功能。" OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它允许开发者以简洁的语法来访问和操作对象图。在Struts 2框架中,OGNL被广泛应用于视图层,用来获取和设置模型数据。以下是对OGNL表达式的详细解析: 1. OGNL表达式语言:OGNL提供了灵活的语法来访问和操作对象的属性,支持点号`.`、方括号`[]`以及方法调用等多种访问方式。 2. 访问上下文(Context)中的对象:在OGNL中,使用`#`符号表示命名空间,可以访问上下文(如Request或Session)中的对象。例如,`#request`、`#session`分别代表HttpServletRequest对象。 3. ValueStack与JSP访问:在Struts 2中,ValueStack是OGNL的根对象,用于存储Action及Action的属性。在JSP页面中,可以直接通过EL表达式(例如`<s:property value="user.username" />`)来访问ValueStack中对象的属性。 4. EL表达式与ValueStack:Struts2通过封装HttpServletRequest,使得EL表达式能直接访问ValueStack中的对象,简化了视图层的开发工作。 5. 创建集合对象:使用OGNL可以方便地创建List和Map集合。例如,`new java.util.ArrayList<>()`或`{ 'key1': 'value1', 'key2': 'value2' }`分别表示创建一个ArrayList和Map对象。 6. 集合中查找对象:OGNL提供检查对象是否存在于集合中的能力。比如,`list.contains(someObject)`或`map.containsKey(someKey)`,可以用来判断某个元素是否在列表或映射中。 此外,OGNL还支持动态方法调用,例如: - `<s:property value="user.get()" />`调用User对象的get()方法。 - `<s:property value="@com.netshuai.action.ManagerAction@get()" />`调用ManagerAction类的静态get()方法。 - `<s:property value="@java.lang.Math@floor(32.56)" />`调用Math类的floor方法。 对于实例化对象并设置属性,可以这样写: - `<s:property value="new com.netshuai.model.User('hello').username" />`将创建一个新的User对象,并设置其username属性为"hello"。 访问集合时,还可以获取列表的大小、特定索引的元素或映射的键和值: - `<s:property value="list.size" />`获取列表的长度。 - `<s:property value="list[0]" />`获取列表第一个元素。 - `<s:property value="map.keys" />`获取Map的所有键。 - `<s:property value="map.values" />`获取Map的所有值。 OGNL为Struts 2提供了一种强大的工具,使得在表现层操作对象和数据变得极其简便,极大地提高了开发效率。