Java Struts2 OGNL(Object-Graph Navigation Language)标签是用于在JSP页面中动态地访问和操作Java对象的强大工具。以下是对这些知识点的详细解释: 1. **对象树的访问**: OGNL允许开发者通过点号(`.`)来遍历对象树,例如`name`、`department.name`、`user.department.factory.manager.name`等,这使得能够访问嵌套的对象属性。 2. **容器变量的访问**: 通过`#`符号,我们可以访问容器变量,如`#name`、`#department.name`、`#user.department.factory.manager.name`。这里的`#`表示的是作用域内的变量,如请求、会话或应用范围的变量。 3. **操作符号**: OGNL支持与Java类似的运算符,包括加减乘除(`+`, `-`, `*`, `/`)、自增自减(`++`, `--`)、等于不等于(`==`, `!=`)、赋值(`=`)等。此外,还有模运算(`mod`)、包含(`in`)和不包含(`not in`)等特殊操作。 4. **容器、数组和对象**: OGNL可以方便地处理数组、ArrayList以及Map。例如,`group.users[0]`获取数组第一个元素,`#session['mySessionPropKey']`访问Map中的键值。它还支持动态构造容器,如`{"green", "red", "blue"}`创建List,`{"key1" : "value1", "key2" : "value2", "key3" : "value3"}`创建Map。 5. **静态方法和变量的访问**: 要调用类的静态方法或访问静态变量,可以使用`@class@member`或`@class@method(args)`格式,如`@com.javaeye.core.Resource@ENABLE`和`@com.javaeye.core.Resource@getAllResources`。 6. **方法调用**: OGNL允许直接调用对象的方法,并可以传递参数,例如`user.getName()`和`group.users.size()`。还可以执行带参数的方法,如`group.containsUser(#requestUser)`。 7. **投影和选择**: - **投影(Projection)**:这类似于SQL中的SELECT操作,从集合中选择指定属性的值。例如,`group.userList.{username}`将返回所有用户的名字列表。 - **选择(Selection)**:这允许根据特定条件筛选集合。选择操作符有`?`(所有匹配项)、`^`(第一个匹配项)和`$`(最后一个匹配项),如`group.userList.{? #this.name != null}`将返回所有名字不为空的用户。 在JSP页面中使用Struts2的OGNL标签,可以极大地提高开发效率和代码的可读性。例如,在提供的代码片段中,可以看到`<%@ taglib prefix="s" uri="/struts-tags"%>`引入了Struts2的标签库,这使得在JSP中可以方便地使用OGNL表达式来操作页面上的Java对象。 ```jsp <%request.setAttribute("sex", Sex.MALE); %> <s:if test="%{#sex == 'MALE'}"> This is a male user. </s:if> ``` 在这个例子中,`<s:if>`标签使用OGNL表达式`#sex == 'MALE'`来判断请求中设置的性别属性是否为"MALE",并根据结果显示不同的文本。 Java Struts2 OGNL标签结合JSP页面,提供了强大的数据绑定和逻辑控制能力,是Web应用程序中不可或缺的一部分。开发者可以利用OGNL的灵活性来实现复杂的业务逻辑,使得代码更加简洁和高效。





















