ognl的全名是 Object-Graph Navigation Language 表示的是图对象导航语言...我觉得它最厉害的一点是,通过"."来实现对象的导航...下面看他他的具体例子.我们应该就可以理解这个意思了
注意,在说例子以前先说三点
(1)我们这里的例子都是访问普通属性和静态方法..获取的也只是普通属性的值或者静态方法返回的值..所以这里一般是用<s:property value="ognl expression">来展示..其中,value里面的值才是ognl表达式.
(2)action里面我们可以有两种方式从页面中获取值.一种是直接在action里面写属性.这个是叫属性驱动.还有一种是在action里面放一个JavaBean的对象.这个叫模型驱动..具体的内容不多说了.下面说的action里面的属性,表示的是属性驱动里面的内容,如果说action里面的对象,那就表示是模型驱动里面的对象引用.
(3)最后说一点是值栈..值栈是一个存放对象的堆栈.是用Map来存放的,存放在值栈里的内容我们可以通过ognl表达式来获取...至于值栈都存放些什么内容.可以通过我之前说的<s:debug>标签来读取..
1 访问值栈中的action的普通属性
<s:property value="username"/>
这个不多说了.直接用对应的属性名就OK
2 访问值栈中的act ion的对象的普通属性(必须有对应的get set方法)
(1)<s:property value="user.name"/>
表示的是访问act ion里面的user对象里面的name属性
(2)<s:property value="student.class.size"/>
表示的是访问act ion里面的student对象里面的class对象里面的size属性...这句话说的有点绕,但是其实很好理解.
只要有需要,里面可以嵌套任意多层.只要中间用"."来分隔就行了
3访问值栈中对象的普通方法
(1)<s:property value="name.length()">
这里访问的是String对象(也就是name)里面的length()这个方法..
(2)<s:property value="user.abc()"/>
这里调用的是user对象里面的abc()方法.访问这个方法的返回值..如果没有返回值,则为空.
4访问act ion中的普通方法
<s:property value="abc()">
访问的是act ion中定义的方法...其实都很类似的...
5 访问静态方法
<s:property value="@com.test.util.S@abc()">
注意,两个@是约定..也就是必须这么写.第一个@后面跟的是类的全名.第二个@后面跟的是对应的方法名.当然,这个方法必须是静态的
这个访问静态方法在struts2.1以后的版本里面需要设置一个属性,否则系统默认是不支持访问静态方法的(struts2.0版本默认是支持访问静态方法的).具体的方法是在struts.xml里面添加这么一句
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
6 访问静态属性
<s:property value="@com.test.util@parm"/>
这个和上面也类似...访问的是静态的属性..
分享到:
相关推荐
### OGNL表达式的理解和应用 #### 一、OGNL简介与基本概念 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架中的默认表达式语言,同时也被广泛...
2. **支持类静态的方法调用和值访问**:可以通过特定语法格式访问类的静态方法或常量,例如`@java.lang.String@format('foo%s', 'bar')`。 3. **支持赋值操作和表达式串联**:OGNL支持赋值操作以及多个表达式的串联...
2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联...
struts2 OGNL表达式使用 OGNL(Object-Graph Navigation ...通过这些示例,我们可以看到OGNL表达式的强大功能,它可以访问和操作对象及其属性,静态方法和属性,Math类的属性,普通类的构造方法,以及容器中的元素。
- 访问类的静态变量和方法:`@完整类名@属性名`或`@完整类名@方法名`。例如,`@net.ilkj.ognl.A@a`访问`A`类的静态变量`a`,`@net.ilkj.ognl.A@findA()`调用静态方法`findA()`。 **Struts2的标签库** Struts2的标签...
OGNL表达式通常由两部分组成:对象路径和方法调用。对象路径用于定位对象,方法调用用于访问或修改对象的方法。例如,`#session.user.name`表示从session中获取名为"user"的对象,然后访问其"name"属性。这里的`#`...
这个类提供了静态方法来解析和解释OGNL表达式,使得开发者能够在运行时动态地访问和操作对象的属性和方法。 在Java编程中,OGNL提供了一种简洁的方式来表达复杂的对象导航路径,它允许我们通过简单的字符串表达式来...
相比EL(Expression Language)表达式,OGNL提供更丰富的功能,如对象方法调用、静态方法调用、值访问以及对集合对象的操作。它的上下文(Context)是一个Map结构,允许存储和访问不同类型的对象,如ActionContext,...
3. **动态方法调用**:OGNL支持静态方法的调用,这使得开发者能够通过OGNL表达式直接调用类的方法,而不必显式创建该类的实例。 4. **集合操作**:通过OGNL可以方便地进行集合操作,如遍历列表、筛选元素等。 ####...
这些方法提供了处理OGNL表达式的基本能力,包括获取值、插入值等,是理解和使用OGNL的关键。 ### 总结 OGNL是Struts2框架中不可或缺的一部分,它极大地简化了对象属性的访问和操作,提高了框架的灵活性和效率。掌握...
支持类静态方法调用和值的访问,表达式的格式为@[类全名]@[方法名|值名],例如:@java.lang.String@format(‘foo %s’,’bar’) ? 操作集合对象。 Ognl有一个上下文(Context)的概念,其实就是一个Map结构,...
OGNL表达式通常包含对象路径、方法调用和属性访问。例如,`person.name`表示从`person`对象中获取`name`属性。如果`name`是一个方法,OGNL会尝试调用它。表达式可以嵌套,如`list[0].property`,访问列表的第一个...
2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路)]@[方法名 | 值名],例如: @java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联,...
OGNL表达式的语法非常灵活,支持`.`和`['']`两种方式访问对象属性。当属性名包含特殊字符如"-"时,应使用`['']`。例如,如果URL参数为`name=gold&&password=jsmart`,我们可以通过`#parameters.name`获取"name"的值...
这些符号在OGNL表达式中经常出现,但它们的使用方法却是开发者不容易掌握和理解的部分。 1.#符号的三种用法 #符号有三种用法: * 访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为...
2. **类静态方法调用和值访问**:允许直接引用类的静态方法或值,如`@java.lang.String@format('foo%s','bar')`。 3. **赋值操作和表达式串联**:可以用OGNL进行赋值操作,并且可以连接多个表达式,如`price=100,...
它有很多特点,例如支持对象方法调用、类静态的方法调用和值访问、赋值操作和表达式串联、访问 OGNL 上下文和 ActionContext、操作集合对象等。 在 Struts2 中,OGNL 表达式需要结合 Struts 标签来使用。其中,“%...
属性”的方式来访问JavaBean对象的方法和属性。例如,在Struts2框架中,如果有一个`Student`类: ```java public class Student { private Integer sid; private String name; // getters and setters } ``...
在 Struts2 中,OGNL 是一个强大的工具,允许开发者访问和操作 ValueStack 中的对象的属性和方法。 一、访问 ValueStack 中的对象属性 在 Struts2 中,可以使用 OGNL 来访问 ValueStack 中的对象属性,例如: ...