Struts2学习——1500OGNL3访问集合

来源:互联网 发布:金融软件行业 编辑:程序博客网 时间:2024/04/30 23:16

OGNL3访问集合

1.分析

除了访问方法和属性之外,还有一些比较常用的应用就是访问集合了,为了做这个实验,我们在原有的OgnlAction上又做了一些小小的改动。

OgnlAction

package com.bjsxt.struts2.ognl;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 String password;    private User user;    private List<User> users =new ArrayList<User>();    private Set<Dog> dogs=new HashSet<Dog>();    private Map<String,Dog> map_dogs=new HashMap<String,Dog>();    private String username;    public OgnlAction() {        users.add(new User(1));        users.add(new User(2));        users.add(new User(3));        dogs.add(new Dog("set1"));        dogs.add(new Dog("set2"));        dogs.add(new Dog("set3"));        map_dogs.put("map1", new Dog("map1"));        map_dogs.put("map2", new Dog("map2"));        map_dogs.put("map3", new Dog("map3"));    }    public OgnlAction(Cat cat, String password, User user, List<User> users,            Set<Dog> dogs, Map<String, Dog> map_dogs, String username) {        super();        this.cat = cat;        this.password = password;        this.user = user;        this.users = users;        this.dogs = dogs;        this.map_dogs = map_dogs;        this.username = username;    }    public String r_str(){        return "action_str";    }    public String execute() {        return SUCCESS;    }    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;    }}

依据上述代码可知,加入了三个集合成员变量,一个list类型,一个set,一个map。

public OgnlAction() {        users.add(new User(1));        users.add(new User(2));        users.add(new User(3));        dogs.add(new Dog("set1"));        dogs.add(new Dog("set2"));        dogs.add(new Dog("set3"));        map_dogs.put("map1", new Dog("map1"));        map_dogs.put("map2", new Dog("map2"));        map_dogs.put("map3", new Dog("map3"));    }

并在构造函数中,对这三个集合变量进行初始化,并填入值。

接着便要利用ognl在ognl.jsp中访问集合。

<?xml version="1.0" encoding="GB18030" ?><%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><%@ taglib uri="/struts-tags" prefix="s" %><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=GB18030" /><title>OGNL表达式语言学习</title></head><body>    <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>访问值栈中的对象的普通属性: <s:property value="cat.friend.name"/></li>        <li>访问值栈中的对象的普通方法: <s:property value="password.length()"/></li>        <li>访问值栈中的对象的普通方法: <s:property value="cat.eat()"/></li>        <li>访问值栈中的对象的普通方法: <s:property value="r_str()"/></li>        <hr/>        <li>访问静态方法: <s:property value="@com.bjsxt.struts2.ognl.Static_Example@r_static_str()"/></li>        <li>访问静态属性: <s:property value="@com.bjsxt.struts2.ognl.Static_Example@static_value"/></li>        <li>访问Math类型静态属性: <s:property value="@@max(2,3)"/></li>        <hr/>        <li>访问List: <s:property value="users"/></li>        <li>访问List中某个元素: <s:property value="users[0]"/></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[0]"/></li>        <li>访问Map: <s:property value="map_dogs"/></li>        <li>访问Map中某个元素: <s:property value="map_dogs.map1"/></li>        <li>访问Map中所有的key: <s:property value="map_dogs.keys"/></li>        <li>访问Map中所有的value: <s:property value="map_dogs.values"/></li>        <li>访问容器大小: <s:property value="users.size()"/></li>    </ol>    <s:debug></s:debug></body></html>

结果如下页面所示

这里写图片描述

2. 总结

从以上的实验结果,可以看出:

  • 要取出整个集合value="集合名称"即可
  • 要取出集合中的元素value="list[index]"或者value="map.keyname"
  • 要取出list中属性的集合value="list.{propertyname}"
  • 要取出map中的key集合与value集合value="map.keys"|value="map.values"

若有不足之处,请不吝赐教

0 0
原创粉丝点击