OGNL表达式

<ol>
  <li>访问值栈中的action的普通属性: username = <s:property value="username"/> </li>
  <li>访问值栈中对象的普通属性(get set方法):<s:property value="user.age"/> | <s:property value="user['age']"/> | <s:property value="user[\"age\"]"/> | wrong: <%--<s:property value="user[age]"/>--%></li>
  <li>访问值栈中对象的普通属性(get set方法): <s:property value="cat.friend.name"/></li>
  <li>访问值栈中对象的普通方法:<s:property value="password.length()"/></li>
  <li>访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" /></li>
  <li>访问值栈中action的普通方法:<s:property value="m()" /></li>
  <hr />
  <li>访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/></li>
  <li>访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/></li>
  <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>
  <hr />
  <li>访问普通类的构造方法:<s:property value="new com.bjsxt.struts2.ognl.User(8)"/></li>
  <hr />
  <li>访问List:<s:property value="users"/></li>
  <li>访问List中某个元素:<s:property value="users[1]"/></li>
  <li>访问List中元素某个属性的集合:<s:property value="users.{age}"/></li>
  <li>访问List中元素某个属性的集合中的特定值:<s:property value="users.{age}[0]"/> | <s:property value="users[0].age"/></li>
  <li>访问Set:<s:property value="dogs"/></li>
  <li>访问Set中某个元素:<s:property value="dogs[1]"/></li>
  <li>访问Map:<s:property value="dogMap"/></li>
  <li>访问Map中某个元素:<s:property value="dogMap.dog101"/> | <s:property value="dogMap['dog101']"/> | <s:property value="dogMap[\"dog101\"]"/></li>
  <li>访问Map中所有的key:<s:property value="dogMap.keys"/></li>
  <li>访问Map中所有的value:<s:property value="dogMap.values"/></li>
  <li>访问容器的大小:<s:property value="dogMap.size()"/> | <s:property value="users.size"/> </li>
  <hr />
  <li>投影(过滤):<s:property value="users.{?#this.age==1}[0]"/></li>
  <li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
  <li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
  <li>投影:<s:property value="users.{$#this.age>1}.{age} == null"/></li>
  <hr />
  <li>[]:<s:property value="[0].username"/></li>
  
 </ol>

 

 

Action

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.opensymphony.xwork2.ActionSupport;

public class OgnlAction extends ActionSupport {
 private Cat cat;
 private Pig pig;
 private Map<String, Dog> dogMap = new HashMap<String, Dog>();

 private Set<Dog> dogs = new HashSet<Dog>();

 private String password;

 private User user;
 private String username;

 private List<User> users = new ArrayList<User>();

 public OgnlAction() {
  users.add(new User(1));
  users.add(new User(2));
  users.add(new User(3));

  dogs.add(new Dog("dog1"));
  dogs.add(new Dog("dog2"));
  dogs.add(new Dog("dog3"));
  
  dogMap.put("dog100", new Dog("dog100"));
  dogMap.put("dog101", new Dog("dog101"));
  dogMap.put("dog102", new Dog("dog102"));
  
 }

 public String execute() {
  return SUCCESS;
 }

 public Cat getCat() {
  return cat;
 }
 
 public Pig getPig() {
  return pig;
 }

 public void setPig(Pig pig) {
  this.pig = pig;
 }

 public Map<String, Dog> getDogMap() {
  return dogMap;
 }

 public Set<Dog> getDogs() {
  return dogs;
 }
 
 public String getPassword() {
  return password;
 }
 
 public User getUser() {
  return user;
 }

 public String getUsername() {
  return username;
 }

 public List<User> getUsers() {
  return users;
 }

 public String m() {
  return "hello";
 }

 public void setCat(Cat cat) {
  this.cat = cat;
 }
 
 public void setDogMap(Map<String, Dog> dogMap) {
  this.dogMap = dogMap;
 }

 public void setDogs(Set<Dog> dogs) {
  this.dogs = dogs;
 }

 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 void setUsers(List<User> users) {
  this.users = users;
 }
}

 

Object


public class Cat {
 
 private Dog friend;
 
 public Dog getFriend() {
  return friend;
 }

 public void setFriend(Dog friend) {
  this.friend = friend;
 }

 public String miaomiao() {
  return "miaomiao";
 }
}

 


public class Dog {
 
 private String name;
 
 public Dog() {
  
 }

 public Dog(String name) {
  super();
  this.name = name;
 }

 

public class Pig {
 
 public String name = "";

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 
 

}

 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 @Override
 public String toString() {
  return "dog: " + name;
 }
}

 

 

public class S {
 public static String STR = "STATIC STRING";
 
 public static String s() {
  return "static method";
 }
}

 

public class TestAction extends ActionSupport {

 @Override
 public String execute() throws Exception {
  return super.execute();
 }

}

 

 

package com.bjsxt.struts2.ognl;

public class User {
 private int age = 8;
 
 public User() {
  
 }
 
 public User(int age) {
  super();
  this.age = age;
 }


 public int getAge() {
  return age;
 }

 public void setAge(int age) {
  this.age = age;
 }
 
 @Override
 public String toString() {
  return "user" + age;
 }
}


Struts.xml

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
 <include file="/com/bjsxt/struts2/ognl/ognl.xml"/>
   


</struts>

你可能感兴趣的:(xml,struts)