Struts2 的OGNL使用简介
<div align="center"> <ol> <li>访问值栈中的Action的普通属性:username=<s:property value="username" /> | password=<s:property value="password" /> </li> <li>Action的user属性值=<s:property value="user"/></li> <li>访问值栈中的对象的普通属性:Action的user属性的name属性值=<s:property value="user.name" /> | =<s:property value="user['name']" /> </li> <li>访问值栈中的对象的普通属性:Action->cat->firend->name=<s:property value="cat.firend.name" /> </li> <hr> <li> 访问值栈中的对象的普通方法username.length():<s:property value="username.length()"/> </li> <li> 访问值栈中的对象的普通方法cat.miao():<s:property value="cat.miao()"/> </li> <li> 访问Action的普通方法myTest():<s:property value="myTest()"/> </li> <hr> <li> 访问静态方法: <s:property value="@com.mengya.util.Common@myStaticTest()"/> </li> <li> 访问静态属性: <s:property value="@com.mengya.util.Common@str"/> </li> <li> 访问Math类的静态方法: <s:property value="@@max(2,3)"/> </li> <hr> <li> 访问普通类的构造方法: <s:property value="new com.mengya.bean.User()"/> </li> <li> 访问普通类的构造方法: <s:property value="new com.mengya.bean.User().setName('mengya')"/> </li> <hr> <li> 访问List:<s:property value="userList" /> </li> <li> 访问List中的某个元素:<s:property value="userList[1]" /> </li> <li> 访问List中元素的某个属性的集合:<s:property value="userList.{name}" /> </li> <li> 访问List中元素的某个属性的集合中的特定值:<s:property value="userList.{name}[1]" /> | <s:property value="userList[1].name" /> </li> <li> 访问Set:<s:property value="dogSet" /> </li> <li> 访问Set中的某个元素:<s:property value="dogSet[1]" /><!-- set没有顺序故取不到值 --> </li> <li> 访问Map:<s:property value="catMap" /> </li> <li> 访问Map中某个元素:<s:property value="catMap.cat1" /> | <s:property value="catMap['cat1']" /> </li> <li> 访问Map中的所有keys:<s:property value="catMap.keys" /> </li> <li> 访问Map中的所有values:<s:property value="catMap.values" /> </li> <li> 访问容器的大小:<s:property value="catMap.size()" /> | <s:property value="userList.size()" /> </li> <hr> <li> 投影(过滤)user的name为aaa的集合:<s:property value="userList.{?#this.name=='aaa'}" /> | <s:property value="userList.{?#this.name=='aaa'}.{name}" /> <!-- 得到的是一个[com.mengya.bean.User@d2efa1] | [aaa] 都是集合 --> | <s:property value="userList.{?#this.name=='aaa'}.{name}[0]" /> </li> <li> 投影(过滤)user的age大于21的第一个元素:<s:property value="userList.{^#this.age>21}" /> | <s:property value="userList.{^#this.age>21}.{name}" /> </li> <li> 投影(过滤)user的age大于21的第最后一个元素:<s:property value="userList.{$#this.age>21}" /> | <s:property value="userList.{$#this.age>21}.{name}" /> </li> <li> 投影(过滤)判断:<s:property value="userList.{$#this.age>21}.{name} == null " /> </li> <hr> <li> [0]表示获得的是第一个Action:<s:property value="[0]" />| <s:property value="[0].username" /> </li> </ol> </div>?web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>
?
struts.xml:
<?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.ognl.allowStaticMethodAccess" value="true"></constant><package name="ognl" extends="struts-default"><action name="ognl" name="code">public class OgnlAction extends ActionSupport {private String username;private String password;/** * 说明:在这里若user对象没有实例化,在页面访问action时给user的属性赋值了,struts2会自动帮我们实例化该user对象 * 前提是User对象提供了无参的构造方法。若页面没有给user的属性赋值则user为null(针对本实例,因为execute方法没有任何操作) * 在这里若对user对象实例化了,则无论在页面访问action时是否也user的属性赋值,user都不会是null */private User user = null;// private User user = new User();private Cat cat = null;private Common common = null;private List<User> userList = null;private Set<Dog> dogSet = null;public Map<String, Cat> catMap = null;@Overridepublic String execute() throws Exception {// cat = new Cat();// Dog dog =new Dog();// dog.setName("Dog");// cat.setFirend(dog);userList = new ArrayList<User>();User u = new User();u.setName("aaa");u.setAge(21);userList.add(u);u = new User();u.setName("bb");u.setAge(22);userList.add(u);u = new User();u.setName("cc");u.setAge(23);userList.add(u);dogSet = new HashSet<Dog>();Dog d = new Dog();d.setName("dog1");dogSet.add(d);d = new Dog();d.setName("dog2");dogSet.add(d);d = new Dog();d.setName("dog3");dogSet.add(d);catMap = new HashMap<String, Cat>();catMap.put("cat1", new Cat());catMap.put("cat2", new Cat());catMap.put("cat3", new Cat());return SUCCESS;}public String myTest() {return "myTest方法";}public Cat getCat() {return cat;}public String getPassword() {return password;}public User getUser() {return user;}public String getUsername() {return username;}public void setCat(Cat cat) {this.cat = cat;}public void setPassword(String password) {this.password = password;}public void setUser(User user) {this.user = user;}public void setUsername(String username) {this.username = username;}public Common getCommon() {return common;}public void setCommon(Common common) {this.common = common;}public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}public Set<Dog> getDogSet() {return dogSet;}public void setDogSet(Set<Dog> dogSet) {this.dogSet = dogSet;}public Map<String, Cat> getCatMap() {return catMap;}public void setCatMap(Map<String, Cat> catMap) {this.catMap = catMap;}}?Action中所引用的Bean:
public class Cat {private String name;private Dog firend;public Dog getFirend() {return firend;}public void setFirend(Dog firend) {this.firend = firend;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String miao(){return "cat的普遍方法调用";}}?
public class Dog {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}?
public class User {private String name;private int age;public String getName() {return name;}public String setName(String name) {this.name = name;return toString();}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}?
测试:
?