OGNL使用详解:Struts2中的属性访问与操作

需积分: 15 0 下载量 35 浏览量 更新于2024-09-18 1 收藏 4KB TXT 举报
"该资源主要介绍了OGNL(Object Graph Navigation Language)在Struts框架中的使用,特别是`s:property`标签的各种用法。" 在Struts框架中,`s:property`标签用于在视图层展示模型数据,它能够方便地访问和显示Action对象、属性以及复杂的对象结构。以下是对给定文件中提到的`property`用法的详细解释: 1. 基本用法:`<s:property value="attrName"/>` 这种用法可以直接显示Action对象中的`attrName`属性值。例如,如果Action中有`String attrName`,这个标签会显示对应的字符串。 2. 访问对象属性:`<s:property value="obj.attrName"/>` 这个用法可以访问Action对象内的嵌套属性,如`obj`对象的`attrName`属性。这需要`obj`有一个`getAttrName()`方法供访问。 3. 调用方法:`<s:property value="obj.methodName()"/>` 这表示调用对象`obj`的方法`methodName()`并显示其返回值。如果`methodName`没有返回值,此标签可能不会显示任何内容。 4. Action方法调用:`<s:property value="methodName()"/>` 类似于上一种情况,但直接在Action级别调用`methodName()`。这意味着Action类需要有该方法,并且方法应返回一个可显示的值。 5. 静态方法调用:`<s:property value="@com.softeem.LoginAction@methodName()"/>` 这种情况用于调用静态方法,如`LoginAction`类的`methodName()`。在OGNL表达式中,`@类名@方法名`用于调用静态方法。 6. 开启OGNL表达式:`struts.ognl.allow=true` 在配置文件中设置此选项后,可以使用OGNL表达式,如`<s:property value="@com.softeem.LoginAction@attrName"/>`来直接访问Action类的静态属性。 7. 内置函数调用:`<s:property value="@@min(9,7)"/>` OGNL支持内置函数,`@@min`是其中一个,可以计算两个数值的最小值。这里的`@@`前缀表示调用OGNL的内置函数。 8. 创建新对象:`<s:property value="new com.softeem.User(2)"/>` OGNL允许动态创建对象,这里创建了一个新的`User`对象,传入参数2。 9. 处理列表: - `<s:property value="listName"/>` 显示整个列表对象。 - `<s:property value="listName[1]"/>` 访问列表中的第二个元素(数组索引从0开始)。 - `<s:property value="listName.{field}"/>` 遍历列表中的每个对象的`field`属性。 - `<s:property value="listName.{field}[0]"/>` 访问列表中每个对象的`field`属性的第一个元素。 10. 设置集合: - `<s:property value="setName"/>` 显示整个集合对象。 - `<s:property value="setName[0]"/>` 访问集合的第一个元素。 11. 处理Map: - `<s:property value="mapName"/>` 显示整个Map对象。 - `<s:property value="mapName.username"/>` 访问Map中键为`username`的值。 - `<s:property value="mapName['username']"/>` 同上,使用单引号包围键名。 - `<s:property value="mapName[\"username\"]"/>` 使用双引号包围键名,当键名包含特殊字符时需要这样做。 - `<s:property value="mapName.keys"/>` 获取Map的所有键。 - `<s:property value="mapName.values"/>` 获取Map的所有值。 - `<s:property value="mapName.size()"/>` 计算Map中元素的数量。 以上就是`s:property`标签在Struts中的一些常见用法,通过这些用法,开发者可以灵活地在视图层展现和操作各种类型的Java对象和数据结构。