OGNL取Map,List,Set的值

用到的类有:

相应代码:

public class Dog {
    private String name;
    
    public Dog(){
        
    }
    public Dog(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 Cat {
    
    private Dog friend;
    private  String name;

public Cat(){}
    
    public Cat(String name) {
    
    this.name = name;
}

    public String getName() {
    return name;
}

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

    private int age;
    
    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Dog getFriend() {
        return friend;
    }

    public void setFriend(Dog friend) {
        this.friend = friend;
    }
    
    public  String miao(){
        return "miao";
    }
    
    public static int leg(){
        return 4;
    }

    
    
}
public class User {

    private String name;
    private int age;
    
    public User(String name, int age) {
        
        this.name = name;
        this.age = age;
    }

    public User(){
        
    }
    
    public User(int age){
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    @Override
    public String toString() {
        
        return "user"+age;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    
}
public class UserAction extends ActionSupport{

    
    /*private  String username;
    private String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }*/
    
    private User user;
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    
    private Cat  cat;
    
    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    private List<User>  users = new ArrayList<User>();
    private Set<Dog> dogs = new HashSet<Dog>();
    private Map<String,Dog>  dogMap  = new HashMap<String,Dog>();
    private Cat[]  cats = new Cat[5];
    public Cat[] getCats() {
        return cats;
    }
    public void setCats(Cat[] cats) {
        this.cats = cats;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }
    public Set<Dog> getDogs() {
        return dogs;
    }
    public void setDogs(Set<Dog> dogs) {
        this.dogs = dogs;
    }
    public Map<String, Dog> getDogMap() {
        return dogMap;
    }
    public void setDogMap(Map<String, Dog> dogMap) {
        this.dogMap = dogMap;
    }


    public UserAction(){
        
        cats[0] = new Cat("cat1");
        cats[1] = new Cat("cat2");
        cats[2] = new Cat("cat3");
        
        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("dog1", new Dog("101"));
        dogMap.put("dog2", new Dog("102"));
        dogMap.put("dog3", new Dog("103"));
    }
    public String execute() throws Exception {
        
        
        
        
        return SUCCESS;
    }
    /*public  int fun(){
        return  250;
    }
    public static int fun2(){
        return 500;
    }*/
    
}

在UserAction里new  几个Map、Set、List,生成相应的get、set方法。

对应的ognl的html代码:

  <body>
        <ol>
            <li>访问值栈中的action中的普通属性:username=:<s:property value="username"/></li>
            <li>访问值栈中 对象的普通属性(get、set方法)<s:property value="user.name"/></li>
            <li>访问值栈中 对象的普通属性(get、set方法)<s:property value="cat.friend.name"/></li>
            <li>访问值栈中 对象的普通方法<s:property value="cat.miao()"/></li>
            <li>访问值栈中 对象的普通方法<s:property value="cat.leg()"/></li>
            <li>访问值栈中 action的普通方法<s:property value="fun()"/></li>
            <li>访问值栈中 action的静态方法<s:property value="fun2()"/></li>
            <hr>
            <li>访问静态方法:<s:property value="@com.oracle.ognl.action.C@ccc()"/></li>
            <li>访问静态属性:<s:property value="@com.oracle.ognl.action.C@sex"/></li>
            <li>访问Math类的静态方法<s:property value="@@max(10,100)"/></li>
            <li>访问普通类的构造方法<s:property value="new com.oracle.action.Cat('sdf')"/></li>
            <hr>
            <li>访问数组元素:<s:property value="cats"/></li>
            <li>访问List:<s:property value="users"/></li>
            <li>访问List中的某个元素:<s:property value="users[0]"/>
            
            <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中某个元素(娶不到,set是无序的):<s:property value="dogs[1]"/></li>
            <li>访问Map(很少一次取出来完):<s:property value="dogMap"/></li>
            <li>访问Map中的某个元素:<s:property value="dogMap.dog1"/>||<s:property value="dogMap['dog1']"/>||<s:property value="dogMap["dog1"]"/></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>
            
        </ol>
        <s:debug></s:debug>
  </body>

效果:

原文地址:https://www.cnblogs.com/lihaoyang/p/4833955.html