源码下载地址:http://download.csdn.net/detail/zhoujing_0424/9239429
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。用法如下:
ognl_test.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
request.setAttribute("user", "ognl");
request.getSession().setAttribute("employee", "xiaoming");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'ognl_test.jsp' starting page</title>
</head>
<body>
<s:property value="#request.user"/><br>
<s:property value="#session.employee"/><br>
<br>============================================<br>
<!-- 使用OGNL表达式创建List集合对象 -->
<s:set var="list" value="{'first','two','three'}"></s:set>
<!-- s:iterator标签在迭代集合时有个特点:会把当前迭代的对象放在值栈的栈顶 -->
<s:iterator value="#list">
<s:property/><br>
</s:iterator>
<br>============================================<br>
<!-- 使用OGNL表达式创建Map集合对象 -->
<s:set var="maps" value="#{'key1':90,'key2':35,'key3':12}"></s:set>
<!-- 使用迭代标签对集合进行迭代 -->
<s:iterator value="#maps">
<s:property value="key"/>=<s:property value="value"/><br>
</s:iterator>
<br>============================================<br>
<!-- 使用OGNL表达式判断元素是否在集合中 -->
<s:if test="'fool' not in {'fooling','bar'}">
不 在
</s:if>
<s:else>
在
</s:else>
</body>
</html>
使用OGNL表达式实现投影功能:
PersonListAction.java:
package cn.zj.action;
import java.util.ArrayList;
import java.util.List;
public class PersonListAction {
private String name;
private List<Book> books;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
public String execute(){
books= new ArrayList<Book>();
books.add(new Book(1,"struts",36));
books.add(new Book(2,"spring",45));
books.add(new Book(3,"hibernate",62));
name="xiaozhang";
return "list";
}
}
Book.java:
package cn.zj.action;
public class Book {
private Integer id;
private String name;
private Integer price;
public Book(Integer id, String name, Integer price) {
this.id = id;
this.name = name;
this.price = price;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
personlist.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'personlist.jsp' starting page</title>
</head>
<body>
<s:property value="name"/><br>
${name}<br>
<s:property value="books"/><br>
<br>============================================<br>
<!-- 采用OGNL表达式实现投影功能,只显示价格大于60的记录 -->
<s:iterator value="books.{?#this.price>60}">
<s:property value="name"/>,<s:property value="price"/><br>
</s:iterator>
</body>
</html>