
OGNL是一种表达式语言,可以存取对象的属性或者调用对象的方法,能够遍历整个对象的,实现对象属性类型的转换等功能。(工程Struts2_1900_OGNL)。
这里需要做的试验较多,我们一个一个讲解。
ognl.jsp
<li>1.访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
OgnlAction.java
//试验1-------
private String username;
private String password;
//试验1-------
public String execute(){
return SUCCESS;
}
说明:这里的action中我们只有两个属性,我们通过OGNL表达式value="username"可以直接从值栈中取得属性的值。我们可以在值栈中找到对应属性的值。
ognl.jsp
<li>2.访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
OgnlAction.java
//试验2-------
private User user ;
//试验2-------
User.java
package com.bjsxt.struts2.ognl;
public class User {
private int age = 8;
public User(){}
public User(int age) {
super();
this.age = age;
}
@Override
public String toString() {
return "user" + age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
说明:
当我们使用地址:8080/Struts2_1900_OGNL/ognl.action?username=u&password=p访问时我们在值栈中发现user对象是null,之前我们知道struts2会帮我们实例化对象,但是这必须有个条件,就是地址后面必须跟上相应的值,如:
:8080/Struts2_1900_OGNL/ognl.action?username=u&password=p&user.age=10这时struts2才会帮我们实例化对象,同时我们的对象中必须有无参构造函数,因为struts2在实例化时需要用到。ognl表达式当然我们也可以自己在action方法中直接将user对象new出来,这相当于自己实例化对象了。
这里我们给出了几种取得普通属性的OGNL表达式,注意其区别。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32069-1.html
因为这一次到南海
只能用一次