OGNL表达式的使用方法 .
2012-07-06 15:04
423 查看
OGNL表达式的使用方法
定义:
OGNL是对象图导航语言(即该表达式访问的是对象及对象的属性)
知识点:
1.基本属性的访问
1.1 访问值栈中action的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="username"/>
1.2 访问值栈中对象的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="student.age"/>
1.3 访问值栈中对象(对象包含对象)的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="cat.friend.name"/>
1.4 访问值栈中对象的普通方法
[xhtml:nogutter] view plaincopy
<s:property value="cat.friend.say().length()"/>
1.5 访问值栈中action的普通方法
[xhtml:nogutter] view plaincopy
<s:property value="execute()"/>
1.6 访问静态方法
[xhtml:nogutter] view plaincopy
<s:property value="@com.wj.struts2.util.OGNLUtil@getString()"/>
1.7 访问静态属性
[xhtml:nogutter] view plaincopy
<s:property value="@com.wj.struts2.util.OGNLUtil@URL"/>
1.8 访问Math类的属性
[xhtml:nogutter] view plaincopy
<s:property value="@@max(5,3)"/>
1.9 访问普通类的构造方法
[xhtml:nogutter] view plaincopy
<s:property value="new com.wj.struts2.action.model.Dog()"/>
2.访问容器
2.1 访问List
2.1.1 访问list
[xhtml:nogutter] view plaincopy
<s:property value="list"/>
2.1.2 访问list中的某个元素
[xhtml:nogutter] view plaincopy
<s:property value="list[2]"/>
2.1.3 访问list中某个元素属性的集合
[xhtml:nogutter] view plaincopy
<s:property value="list.{no}"/>
2.1.4 访问list中某个元素的属性
[xhtml:nogutter] view plaincopy
<s:property value="list[2].no"/>
2.2 访问Set
2.2.1 访问set
[xhtml:nogutter] view plaincopy
<s:property value="set"/>
2.2.2 访问set中的某个元素(不可访问,set无顺序)
2.3 访问Map
2.3.1 访问Map
[xhtml:nogutter] view plaincopy
<s:property value="map"/>
2.3.2 访问Map中的某个元素
[xhtml:nogutter] view plaincopy
<s:property value="map['key']"/>
2.3.3 访问Map中的所有key
[xhtml:nogutter] view plaincopy
<s:property value="map.keys"/>
2.3.4 访问Map中的所有value
[xhtml:nogutter] view plaincopy
<s:property value="map.values"/>
2.3.5 访问容器的大小
[xhtml:nogutter] view plaincopy
<s:property value="map.size()"/>
3.投影
3.1 通过投影访问list中年龄为25的学生的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{?#this.age==25}[0].{no}[0]"/>
3.2 通过投影访问list中年龄大于25的集合中的首元素的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{^#this.age>20}.{no}"/>
3.3 通过投影访问list中年龄大于25的集合中的尾元素的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{$#this.age>20}.{no}"/>
3.4 通过投影判断list中年龄大于25的集合是否为空
[xhtml:nogutter] view plaincopy
<s:property value="list.{?#this.age>25}==null"/>
4.栈
用[]来访问栈中的元素,注意:[0]表示从栈中的开始位置进行遍历其中的元素
[xhtml:nogutter] view plaincopy
<s:property value="[1][0].execute()"/>
示例代码
OGNLAction.java
[java:nogutter] view plaincopy
/**
* OGNL表达式
* @author 健
*/
public class OGNLAction extends ActionSupport{
/**
* 序列化
*/
private static final long serialVersionUID = 1L;
/**
* 猫
*/
private Cat cat;
/**
* List
*/
private List <Student>list;
/**
* Map
*/
private Map <String,Dog>map;
/**
* 密码
*/
private String password;
/**
* Set
*/
private Set <Dog>set;
/**
* 学生
*/
private Student student;
/**
* 用户名
*/
private String username;
public OGNLAction(){
this.list = new ArrayList<Student>();
Student student1 = new Student("zhangsan",20);
Student student2 = new Student("lisi",25);
Student student3 = new Student("wangwu",28);
Student student4 = new Student("zhaoliu",24);
Student student5 = new Student("xiaotaoqi",18);
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
this.set = new HashSet<Dog>();
Dog dog1 = new Dog("bandeng");
Dog dog2 = new Dog("zhuozi");
Dog dog3 = new Dog("yizi");
set.add(dog1);
set.add(dog2);
set.add(dog3);
this.map = new HashMap<String, Dog>();
map.put("0001", dog1);
map.put("0002", dog2);
map.put("0003", dog3);
}
/**
* 控制器
* @return 跳转的页面
*/
@Override
public String execute(){
return "success";
}
/**
* 取得cat
* @return cat
*/
public Cat getCat() {
return cat;
}
/**
* 取得list
* @return list
*/
public List<Student> getList() {
return list;
}
/**
* 取得map
* @return map
*/
public Map<String, Dog> getMap() {
return map;
}
/**
* 取得password
* @return password
*/
public String getPassword() {
return password;
}
/**
* 取得set
* @return set
*/
public Set<Dog> getSet() {
return set;
}
/**
* 取得student
* @return student
*/
public Student getStudent() {
return student;
}
/**
* 取得username
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置cat
* @param cat cat
*/
public void setCat(Cat cat) {
this.cat = cat;
}
/**
* 设置list
* @param list list
*/
public void setList(List<Student> list) {
this.list = list;
}
/**
* 设置map
* @param map map
*/
public void setMap(Map<String, Dog> map) {
this.map = map;
}
/**
* 设置password
* @param password password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 设置set
* @param set set
*/
public void setSet(Set<Dog> set) {
this.set = set;
}
/**
* 设置student
* @param student student
*/
public void setStudent(Student student) {
this.student = student;
}
/**
* 设置username
* @param username username
*/
public void setUsername(String username) {
this.username = username;
}
}
ChainAction.java
[java:nogutter] view plaincopy
/**
* OGNL表达式
* @author 健
*/
public class ChainAction extends ActionSupport{
/**
* 序列化
*/
private static final long serialVersionUID = 1L;
/**
* 控制器
* @return 跳转的页面
*/
@Override
public String execute(){
return "success";
}
}
OGNLUtil.java
[java:nogutter] view plaincopy
/**
* 工具类
* @author 健
*/
public class OGNLUtil {
/**
* 静态常量
*/
public static final String URL = "static property";
/**
* 静态方法
* @return 字符串
*/
public static String getString(){
return "static method";
}
}
Cat.java
[java:nogutter] view plaincopy
/**
* 猫
* @author 健
*/
public class Cat {
/**
* 名字
*/
private String name;
/**
* 朋友
*/
private Dog friend;
/**
* 取得name
* @return name
*/
public String getName() {
return name;
}
/**
* 设置name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* 取得friend
* @return friend
*/
public Dog getFriend() {
return friend;
}
/**
* 设置friend
* @param friend friend
*/
public void setFriend(Dog friend) {
this.friend = friend;
}
/**
* 类方法
* @return 返回字符串
*/
public String say(){
return "miaomiao";
}
/**
* 构造
*/
public Cat(){
System.out.println("cat constructor");
}
/**
* 重写toString方法
*/
public String toString(){
return "cat name is" + this.name;
}
}
Dog.java
[java:nogutter] view plaincopy
/**
* 狗
* @author 健
*/
public class Dog {
/**
* 名字
*/
private String name;
/**
* 构造
*/
public Dog(){
System.out.println("dog constructor");
}
/**
* 构造
*/
public Dog(String name){
this.name = name;
}
/**
* 取得name
* @return name
*/
public String getName() {
return name;
}
/**
* 设置name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* 类方法
* @return 返回字符串
*/
public String say(){
return "miaomiao";
}
/**
* 重写toString方法
*/
public String toString(){
return "dog name is" + this.name;
}
}
Student.java
[java:nogutter] view plaincopy
/**
* 学生类
* @author 健
*/
public class Student {
/**
* 学号
*/
private String no;
/**
* 年龄
*/
private int age;
/**
* 构造方法
*/
public Student(){
System.out.println("进入学生类的构造方法");
}
/**
* 构造方法
*/
public Student(String no,int age){
this.age = age;
this.no = no;
}
/**
* 取得no
* @return no
*/
public String getNo() {
return no;
}
/**
* 设置no
* @param no no
*/
public void setNo(String no) {
this.no = no;
}
/**
* 取得age
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置age
* @param age age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 重写toString方法
*/
public String toString(){
return "Student : " + this.no + " , " + this.age;
}
}
struts.xml
[xhtml:nogutter] view plaincopy
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 配置开发模式:修改不用重启服务器 -->
<constant name="struts.devMode" value="true"/>
<!-- 配置允许静态方法的访问 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 包含的文件 -->
<include file="ognl.xml"></include>
</struts>
ognl.xml
[xhtml:nogutter] view plaincopy
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="ognl" namespace="/ognl" extends="struts-default">
<action name="ognl" class="com.wj.struts2.action.OGNLAction" >
<result name="success">/result.jsp</result>
</action>
<action name="chain" class="com.wj.struts2.action.ChainAction">
<result type="chain" >
<param name="actionName">ognl</param>
<param name="namespace">/ognl</param>
</result>
</action>
</package>
</struts>
index.jsp
[xhtml:nogutter] view plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Struts2_OGNL</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head>
<body>
<div>
访问基本元素
<li><a href="ognl/ognl?username=wangjian&password=123456" mce_href="ognl/ognl?username=wangjian&password=123456">1.访问值栈中action的普通属性</a></li>
<li><a href="ognl/ognl?student.age=20&student.no=0001" mce_href="ognl/ognl?student.age=20&student.no=0001">2.访问值栈中对象的普通属性</a></li>
<li><a href="ognl/ognl?cat.friend.name=oudy" mce_href="ognl/ognl?cat.friend.name=oudy">3.访问值栈中对象(对象包含对象)的普通属性</a></li>
<li><a href="ognl/ognl?cat.friend.name=oudy" mce_href="ognl/ognl?cat.friend.name=oudy">4.访问值栈中对象的普通方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">5.访问值栈中action的普通方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">6.访问静态方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">7.访问静态属性</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">8.访问Math类的属性</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">9.访问普通类的构造方法</a></li>
</div>
<br>
<br>
<div>
访问容器<br>
(一)访问List<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问list</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问list中的某个元素</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.访问list中某个元素属性的集合</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.访问list中某个元素的属性</a></li><br>
(二)访问Set<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问set</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问set中的某个元素(不可访问,set无顺序)</a></li><br>
(三)访问Map<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问Map</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问Map中的某个元素</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.访问Map中的所有key</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.访问Map中的所有value</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">5.访问容器的大小</a></li>
<br>
</div>
<br>
<br>
<div>
投影<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.通过投影访问list中年龄为25的学生的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.通过投影访问list中年龄大于25的集合中的首元素的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.通过投影访问list中年龄大于25的集合中的尾元素的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.通过投影判断list中年龄大于25的集合是否为空</a></li><br>
</div>
<br>
<br>
<div>
栈<br>
<li><a href="ognl/chain" mce_href="ognl/chain">用[]来访问栈中的元素,注意:[1]表示从栈中的开始位置进行遍历其中的元素</a></li>
</div>
</body>
</html>
result.jsp
[xhtml:nogutter] view plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Struts2_OGNL</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head>
<body>
访问值栈中action的普通属性:<br>
<li>username:<s:property value="username"/></li>
<li>password:<s:property value="password"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象的普通属性<br>
<li>student:<s:property value="student"/></li>
<li>no:<s:property value="student.no"/></li>
<li>age:<s:property value="student.age"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象(对象包含对象)的普通属性<br>
<li>friendName:<s:property value="cat.friend.name"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象的普通方法<br>
<li>method01:<s:property value="cat.friend.say().length()"/></li>
<li>method02:<s:property value="cat.say()"/></li>
<br>
----------------------------------------
<br>
访问值栈中action的普通方法<br>
<li>method:<s:property value="execute()"/></li>
<br>
----------------------------------------
<br>
访问静态方法<br>
<li>static method:<s:property value="@com.wj.struts2.util.OGNLUtil@getString()"/></li>
<br>
----------------------------------------
<br>
访问静态属性<br>
<li>static property:<s:property value="@com.wj.struts2.util.OGNLUtil@URL"/></li>
<br>
----------------------------------------
<br>
访问静态属性<br>
<li>Math method:<s:property value="@@max(5,3)"/></li>
<br>
----------------------------------------
<br>
访问普通类的构造方法<br>
<li>Constructer method:<s:property value="new com.wj.struts2.action.model.Dog()"/></li>
<br>
----------------------------------------
<br>
<br>
<br>
访问容器<br>
(一)访问List<br>
<li>1.访问list----<s:property value="list"/></li>
<li>2.访问list中的某个元素----<s:property value="list[2]"/></li>
<li>3.访问list中某个元素属性的集合----<s:property value="list.{no}"/></li>
<li>4.访问list中某个元素的属性----<s:property value="list[2].no"/></li><br>
(二)访问Set<br>
<li>1.访问set----<s:property value="set"/></li>
<li>2.访问set中的某个元素(不可访问,set无顺序)----<s:property value="set[1]"/></li><br>
(三)访问Map<br>
<li>1.访问Map----<s:property value="map"/></li>
<li>2.访问Map中的某个元素----<s:property value="map['0001']"/></li>
<li>3.访问Map中的所有key----<s:property value="map.keys"/></li>
<li>4.访问Map中的所有value----<s:property value="map.values"/></li>
<li>5.访问容器的大小----<s:property value="map.size()"/></li>
<br>
----------------------------------------
<br>
<br>
<br>
<div>
投影<br>
<li>1.通过投影访问list中年龄为25的学生的姓名----<s:property value="list.{?#this.age==25}[0].{no}[0]"/></li>
<li>2.通过投影访问list中年龄大于25的集合中的首元素的姓名----<s:property value="list.{^#this.age>20}.{no}"/></li>
<li>3.通过投影访问list中年龄大于25的集合中的尾元素的姓名----<s:property value="list.{$#this.age>20}.{no}"/></li>
<li>4.通过投影判断list中年龄大于25的集合是否为空----<s:property value="list.{?#this.age>25}==null"/></li><br>
</div>
----------------------------------------
<br>
<br>
<br>
<div>
栈<br>
<li>用[]来访问栈中的元素,注意:[0]中0表示从栈中的开始位置进行遍历其中的元素----<s:property value="[1][0].execute()"/></li>
</div>
<s:debug></s:debug>
</body>
</html>
定义:
OGNL是对象图导航语言(即该表达式访问的是对象及对象的属性)
知识点:
1.基本属性的访问
1.1 访问值栈中action的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="username"/>
1.2 访问值栈中对象的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="student.age"/>
1.3 访问值栈中对象(对象包含对象)的普通属性
[xhtml:nogutter] view plaincopy
<s:property value="cat.friend.name"/>
1.4 访问值栈中对象的普通方法
[xhtml:nogutter] view plaincopy
<s:property value="cat.friend.say().length()"/>
1.5 访问值栈中action的普通方法
[xhtml:nogutter] view plaincopy
<s:property value="execute()"/>
1.6 访问静态方法
[xhtml:nogutter] view plaincopy
<s:property value="@com.wj.struts2.util.OGNLUtil@getString()"/>
1.7 访问静态属性
[xhtml:nogutter] view plaincopy
<s:property value="@com.wj.struts2.util.OGNLUtil@URL"/>
1.8 访问Math类的属性
[xhtml:nogutter] view plaincopy
<s:property value="@@max(5,3)"/>
1.9 访问普通类的构造方法
[xhtml:nogutter] view plaincopy
<s:property value="new com.wj.struts2.action.model.Dog()"/>
2.访问容器
2.1 访问List
2.1.1 访问list
[xhtml:nogutter] view plaincopy
<s:property value="list"/>
2.1.2 访问list中的某个元素
[xhtml:nogutter] view plaincopy
<s:property value="list[2]"/>
2.1.3 访问list中某个元素属性的集合
[xhtml:nogutter] view plaincopy
<s:property value="list.{no}"/>
2.1.4 访问list中某个元素的属性
[xhtml:nogutter] view plaincopy
<s:property value="list[2].no"/>
2.2 访问Set
2.2.1 访问set
[xhtml:nogutter] view plaincopy
<s:property value="set"/>
2.2.2 访问set中的某个元素(不可访问,set无顺序)
2.3 访问Map
2.3.1 访问Map
[xhtml:nogutter] view plaincopy
<s:property value="map"/>
2.3.2 访问Map中的某个元素
[xhtml:nogutter] view plaincopy
<s:property value="map['key']"/>
2.3.3 访问Map中的所有key
[xhtml:nogutter] view plaincopy
<s:property value="map.keys"/>
2.3.4 访问Map中的所有value
[xhtml:nogutter] view plaincopy
<s:property value="map.values"/>
2.3.5 访问容器的大小
[xhtml:nogutter] view plaincopy
<s:property value="map.size()"/>
3.投影
3.1 通过投影访问list中年龄为25的学生的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{?#this.age==25}[0].{no}[0]"/>
3.2 通过投影访问list中年龄大于25的集合中的首元素的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{^#this.age>20}.{no}"/>
3.3 通过投影访问list中年龄大于25的集合中的尾元素的姓名
[xhtml:nogutter] view plaincopy
<s:property value="list.{$#this.age>20}.{no}"/>
3.4 通过投影判断list中年龄大于25的集合是否为空
[xhtml:nogutter] view plaincopy
<s:property value="list.{?#this.age>25}==null"/>
4.栈
用[]来访问栈中的元素,注意:[0]表示从栈中的开始位置进行遍历其中的元素
[xhtml:nogutter] view plaincopy
<s:property value="[1][0].execute()"/>
示例代码
OGNLAction.java
[java:nogutter] view plaincopy
/**
* OGNL表达式
* @author 健
*/
public class OGNLAction extends ActionSupport{
/**
* 序列化
*/
private static final long serialVersionUID = 1L;
/**
* 猫
*/
private Cat cat;
/**
* List
*/
private List <Student>list;
/**
* Map
*/
private Map <String,Dog>map;
/**
* 密码
*/
private String password;
/**
* Set
*/
private Set <Dog>set;
/**
* 学生
*/
private Student student;
/**
* 用户名
*/
private String username;
public OGNLAction(){
this.list = new ArrayList<Student>();
Student student1 = new Student("zhangsan",20);
Student student2 = new Student("lisi",25);
Student student3 = new Student("wangwu",28);
Student student4 = new Student("zhaoliu",24);
Student student5 = new Student("xiaotaoqi",18);
list.add(student1);
list.add(student2);
list.add(student3);
list.add(student4);
list.add(student5);
this.set = new HashSet<Dog>();
Dog dog1 = new Dog("bandeng");
Dog dog2 = new Dog("zhuozi");
Dog dog3 = new Dog("yizi");
set.add(dog1);
set.add(dog2);
set.add(dog3);
this.map = new HashMap<String, Dog>();
map.put("0001", dog1);
map.put("0002", dog2);
map.put("0003", dog3);
}
/**
* 控制器
* @return 跳转的页面
*/
@Override
public String execute(){
return "success";
}
/**
* 取得cat
* @return cat
*/
public Cat getCat() {
return cat;
}
/**
* 取得list
* @return list
*/
public List<Student> getList() {
return list;
}
/**
* 取得map
* @return map
*/
public Map<String, Dog> getMap() {
return map;
}
/**
* 取得password
* @return password
*/
public String getPassword() {
return password;
}
/**
* 取得set
* @return set
*/
public Set<Dog> getSet() {
return set;
}
/**
* 取得student
* @return student
*/
public Student getStudent() {
return student;
}
/**
* 取得username
* @return username
*/
public String getUsername() {
return username;
}
/**
* 设置cat
* @param cat cat
*/
public void setCat(Cat cat) {
this.cat = cat;
}
/**
* 设置list
* @param list list
*/
public void setList(List<Student> list) {
this.list = list;
}
/**
* 设置map
* @param map map
*/
public void setMap(Map<String, Dog> map) {
this.map = map;
}
/**
* 设置password
* @param password password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* 设置set
* @param set set
*/
public void setSet(Set<Dog> set) {
this.set = set;
}
/**
* 设置student
* @param student student
*/
public void setStudent(Student student) {
this.student = student;
}
/**
* 设置username
* @param username username
*/
public void setUsername(String username) {
this.username = username;
}
}
ChainAction.java
[java:nogutter] view plaincopy
/**
* OGNL表达式
* @author 健
*/
public class ChainAction extends ActionSupport{
/**
* 序列化
*/
private static final long serialVersionUID = 1L;
/**
* 控制器
* @return 跳转的页面
*/
@Override
public String execute(){
return "success";
}
}
OGNLUtil.java
[java:nogutter] view plaincopy
/**
* 工具类
* @author 健
*/
public class OGNLUtil {
/**
* 静态常量
*/
public static final String URL = "static property";
/**
* 静态方法
* @return 字符串
*/
public static String getString(){
return "static method";
}
}
Cat.java
[java:nogutter] view plaincopy
/**
* 猫
* @author 健
*/
public class Cat {
/**
* 名字
*/
private String name;
/**
* 朋友
*/
private Dog friend;
/**
* 取得name
* @return name
*/
public String getName() {
return name;
}
/**
* 设置name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* 取得friend
* @return friend
*/
public Dog getFriend() {
return friend;
}
/**
* 设置friend
* @param friend friend
*/
public void setFriend(Dog friend) {
this.friend = friend;
}
/**
* 类方法
* @return 返回字符串
*/
public String say(){
return "miaomiao";
}
/**
* 构造
*/
public Cat(){
System.out.println("cat constructor");
}
/**
* 重写toString方法
*/
public String toString(){
return "cat name is" + this.name;
}
}
Dog.java
[java:nogutter] view plaincopy
/**
* 狗
* @author 健
*/
public class Dog {
/**
* 名字
*/
private String name;
/**
* 构造
*/
public Dog(){
System.out.println("dog constructor");
}
/**
* 构造
*/
public Dog(String name){
this.name = name;
}
/**
* 取得name
* @return name
*/
public String getName() {
return name;
}
/**
* 设置name
* @param name name
*/
public void setName(String name) {
this.name = name;
}
/**
* 类方法
* @return 返回字符串
*/
public String say(){
return "miaomiao";
}
/**
* 重写toString方法
*/
public String toString(){
return "dog name is" + this.name;
}
}
Student.java
[java:nogutter] view plaincopy
/**
* 学生类
* @author 健
*/
public class Student {
/**
* 学号
*/
private String no;
/**
* 年龄
*/
private int age;
/**
* 构造方法
*/
public Student(){
System.out.println("进入学生类的构造方法");
}
/**
* 构造方法
*/
public Student(String no,int age){
this.age = age;
this.no = no;
}
/**
* 取得no
* @return no
*/
public String getNo() {
return no;
}
/**
* 设置no
* @param no no
*/
public void setNo(String no) {
this.no = no;
}
/**
* 取得age
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置age
* @param age age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 重写toString方法
*/
public String toString(){
return "Student : " + this.no + " , " + this.age;
}
}
struts.xml
[xhtml:nogutter] view plaincopy
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- 配置开发模式:修改不用重启服务器 -->
<constant name="struts.devMode" value="true"/>
<!-- 配置允许静态方法的访问 -->
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<!-- 包含的文件 -->
<include file="ognl.xml"></include>
</struts>
ognl.xml
[xhtml:nogutter] view plaincopy
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="ognl" namespace="/ognl" extends="struts-default">
<action name="ognl" class="com.wj.struts2.action.OGNLAction" >
<result name="success">/result.jsp</result>
</action>
<action name="chain" class="com.wj.struts2.action.ChainAction">
<result type="chain" >
<param name="actionName">ognl</param>
<param name="namespace">/ognl</param>
</result>
</action>
</package>
</struts>
index.jsp
[xhtml:nogutter] view plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Struts2_OGNL</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head>
<body>
<div>
访问基本元素
<li><a href="ognl/ognl?username=wangjian&password=123456" mce_href="ognl/ognl?username=wangjian&password=123456">1.访问值栈中action的普通属性</a></li>
<li><a href="ognl/ognl?student.age=20&student.no=0001" mce_href="ognl/ognl?student.age=20&student.no=0001">2.访问值栈中对象的普通属性</a></li>
<li><a href="ognl/ognl?cat.friend.name=oudy" mce_href="ognl/ognl?cat.friend.name=oudy">3.访问值栈中对象(对象包含对象)的普通属性</a></li>
<li><a href="ognl/ognl?cat.friend.name=oudy" mce_href="ognl/ognl?cat.friend.name=oudy">4.访问值栈中对象的普通方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">5.访问值栈中action的普通方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">6.访问静态方法</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">7.访问静态属性</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">8.访问Math类的属性</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">9.访问普通类的构造方法</a></li>
</div>
<br>
<br>
<div>
访问容器<br>
(一)访问List<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问list</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问list中的某个元素</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.访问list中某个元素属性的集合</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.访问list中某个元素的属性</a></li><br>
(二)访问Set<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问set</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问set中的某个元素(不可访问,set无顺序)</a></li><br>
(三)访问Map<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.访问Map</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.访问Map中的某个元素</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.访问Map中的所有key</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.访问Map中的所有value</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">5.访问容器的大小</a></li>
<br>
</div>
<br>
<br>
<div>
投影<br>
<li><a href="ognl/ognl" mce_href="ognl/ognl">1.通过投影访问list中年龄为25的学生的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">2.通过投影访问list中年龄大于25的集合中的首元素的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">3.通过投影访问list中年龄大于25的集合中的尾元素的姓名</a></li>
<li><a href="ognl/ognl" mce_href="ognl/ognl">4.通过投影判断list中年龄大于25的集合是否为空</a></li><br>
</div>
<br>
<br>
<div>
栈<br>
<li><a href="ognl/chain" mce_href="ognl/chain">用[]来访问栈中的元素,注意:[1]表示从栈中的开始位置进行遍历其中的元素</a></li>
</div>
</body>
</html>
result.jsp
[xhtml:nogutter] view plaincopy
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Struts2_OGNL</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
-->
</head>
<body>
访问值栈中action的普通属性:<br>
<li>username:<s:property value="username"/></li>
<li>password:<s:property value="password"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象的普通属性<br>
<li>student:<s:property value="student"/></li>
<li>no:<s:property value="student.no"/></li>
<li>age:<s:property value="student.age"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象(对象包含对象)的普通属性<br>
<li>friendName:<s:property value="cat.friend.name"/></li>
<br>
----------------------------------------
<br>
访问值栈中对象的普通方法<br>
<li>method01:<s:property value="cat.friend.say().length()"/></li>
<li>method02:<s:property value="cat.say()"/></li>
<br>
----------------------------------------
<br>
访问值栈中action的普通方法<br>
<li>method:<s:property value="execute()"/></li>
<br>
----------------------------------------
<br>
访问静态方法<br>
<li>static method:<s:property value="@com.wj.struts2.util.OGNLUtil@getString()"/></li>
<br>
----------------------------------------
<br>
访问静态属性<br>
<li>static property:<s:property value="@com.wj.struts2.util.OGNLUtil@URL"/></li>
<br>
----------------------------------------
<br>
访问静态属性<br>
<li>Math method:<s:property value="@@max(5,3)"/></li>
<br>
----------------------------------------
<br>
访问普通类的构造方法<br>
<li>Constructer method:<s:property value="new com.wj.struts2.action.model.Dog()"/></li>
<br>
----------------------------------------
<br>
<br>
<br>
访问容器<br>
(一)访问List<br>
<li>1.访问list----<s:property value="list"/></li>
<li>2.访问list中的某个元素----<s:property value="list[2]"/></li>
<li>3.访问list中某个元素属性的集合----<s:property value="list.{no}"/></li>
<li>4.访问list中某个元素的属性----<s:property value="list[2].no"/></li><br>
(二)访问Set<br>
<li>1.访问set----<s:property value="set"/></li>
<li>2.访问set中的某个元素(不可访问,set无顺序)----<s:property value="set[1]"/></li><br>
(三)访问Map<br>
<li>1.访问Map----<s:property value="map"/></li>
<li>2.访问Map中的某个元素----<s:property value="map['0001']"/></li>
<li>3.访问Map中的所有key----<s:property value="map.keys"/></li>
<li>4.访问Map中的所有value----<s:property value="map.values"/></li>
<li>5.访问容器的大小----<s:property value="map.size()"/></li>
<br>
----------------------------------------
<br>
<br>
<br>
<div>
投影<br>
<li>1.通过投影访问list中年龄为25的学生的姓名----<s:property value="list.{?#this.age==25}[0].{no}[0]"/></li>
<li>2.通过投影访问list中年龄大于25的集合中的首元素的姓名----<s:property value="list.{^#this.age>20}.{no}"/></li>
<li>3.通过投影访问list中年龄大于25的集合中的尾元素的姓名----<s:property value="list.{$#this.age>20}.{no}"/></li>
<li>4.通过投影判断list中年龄大于25的集合是否为空----<s:property value="list.{?#this.age>25}==null"/></li><br>
</div>
----------------------------------------
<br>
<br>
<br>
<div>
栈<br>
<li>用[]来访问栈中的元素,注意:[0]中0表示从栈中的开始位置进行遍历其中的元素----<s:property value="[1][0].execute()"/></li>
</div>
<s:debug></s:debug>
</body>
</html>
相关文章推荐
- 关于struts2中使用OGNL表达式取值,取不到值的原因及解决方法
- Struts2中使用OGNL表达式语言访问静态方法和静态属性以及我遇到的问题和解决方法
- Ognl表达式基本原理和使用方法
- Ognl方法使用(利用表达式语言获取数据)
- struts2_ognl表达式符号的使用方法
- Ognl方法使用(利用表达式语言获取数据)
- OGNL表达式中的@..@..使用方法注意
- OA中总结:s:select,关于使用modelDriven,项目分层,@Transactional,jspf,各个层上配置注解交给spring管理的方法,简单的OGNL表达式写法
- Ognl表达式基本原理和使用方法
- 使用struts2中的ognl表达式调用类方法
- OGNL表达式的使用方法
- struts2使用OGNL表达式访问方法与属性
- js中使用正则表达式的方法
- 在此上下文中不允许使用子查询。只允许使用标量表达式。Insert 查询结果-解决方法
- Swift中使用正则表达式的一些方法
- js中使用正则表达式(二)操作正则表达式的对象RegExp、String和方法
- iOS开发-正则表达式的使用方法
- js中match、replace方法中使用正则表达式
- OGNL表达式(对方法的调用,对root,context上下文对象的概念,以及测试调用方法)
- 使用JS中的exec()方法构造正则表达式验证