OGNL表达式详解:Struts2中的使用示例

需积分: 1 10 下载量 68 浏览量 更新于2024-09-11 收藏 64KB DOC 举报
"这篇文档是关于Struts2框架中OGNL(Object-Graph Navigation Language)的详尽总结,主要涵盖了OGNL表达式的各种用法,包括访问对象属性、方法、静态方法以及构造方法,并且提到了如何初始化模型和操作列表。" OGNL(Object-Graph Navigation Language)是Struts2框架中一个强大的表达式语言,用于访问和操作对象图。以下是对标题和描述中提及的OGNL知识点的详细解释: 1. 访问值栈中的属性: - OGNL可以访问Action中的普通属性,如`<s:property value="username"/>`,这里的`username`是OGNL表达式,用于获取值栈中Action的`username`属性。 - 对于私有属性如`PrivateString username`,OGNL可以通过getter和setter方法进行访问,例如`<s:property value="user.age"/>`。 2. 访问嵌套对象的属性: - 当Action中有一个`private User user`属性,且User类中有`private int age`时,可以使用`<s:property value="user.age"/>`来获取`age`值。此外,OGNL支持使用数组或Map的键值访问方式,如`<s:property value="user['age']"/>`和`<s:property value="user[\"age\"]"/>`。 3. 访问方法: - OGNL不仅可以获取属性,还能调用对象的普通方法,如`<s:property value="password.length()"/>`来获取字符串`password`的长度。 - 如果Action中有方法`m()`,则可以通过`<s:property value="m()"/>`来执行这个方法。 - 对于嵌套对象的方法调用,如`Action`中有`private Cat cat`,而`Cat`类中有`public void miaomiao()`,则可以使用`<s:property value="cat.miaomiao()"/>`。 4. 静态方法和属性访问: - 为了允许访问静态方法和属性,需要在`Struts.xml`配置文件中添加`<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>`。 - 静态方法的访问,如`<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>`,其中`@com.bjsxt.struts2.ognl.S@s()`是调用`S`类的静态方法`s`。 - 访问静态属性,如`<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>`,这里的`@com.bjsxt.struts2.ognl.S@STR`是获取`S`类的静态属性`STR`。 - 调用Java内置类的静态方法,如`<s:property value="@@max(2,3)"/>`,这将调用`Math`类的`max`方法。 5. 构造方法: - OGNL还可以用来创建新对象,如`<s:property value="new com.bjsxt.struts2.ognl.User(8)"/>`,这会实例化一个新的`User`对象并传入参数`8`。 6. 访问列表: - 访问列表通常涉及到迭代,例如`<s:property value="u">`会遍历列表`u`并显示其元素。可以结合Struts2的迭代标签`<s:iterator>`来进一步操作列表中的元素。 OGNL是Struts2框架中强大的数据绑定和表达式语言,能够灵活地处理对象、属性、方法以及复杂的数据结构,为开发提供了极大的便利。