源碼下載地址: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>