Struts2-OGNL

在JSP页面获取数据除了使用EL表达式之外,Struts2还提供了另外一种访问并显示数据的表达式,那就是OGNL(Object-Graph Navigation Language 对象图导航语言)。

  • OGNL表达式功能及特点
    1、能存取对象属性、调用对象方法
    2、能访问静态方法、静态属性
    3、能访问值栈及Stack Context
    4、能操作集合对象
    5、支付赋值、运算操作、字段类型转化

一、访问值栈

值栈(Value Stack)可以理解为一个用于存储数据的Map,主要用于存放当前Action实例。

  • action配置
<action name="gotoHousePage" class="com.pb05.demo01.StudentsAction" method="gotoHousePage">
    <result>/jsp/05_OGNL访问值栈和StackContext/01_访问值栈.jsp</result>
</action>
  • action类代码(JavaBean方式为例)
public class StudentsAction extends ActionSupport {
    private Students students;
    private String name;
    private int age = 18;

    public String gotoHousePage() {
        Students students = new Students("张三", "123");
        this.setStudents(students);
        this.name = "你好!";
        return SUCCESS;
    }

    public Students getStudents() {
        return students;
    }

    public void setStudents(Students students) {
        this.students = students;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

}
  • 输出页面

这里写图片描述

  • 通过action访问的结果

这里写图片描述


二、访问Stack Context

上面的示例是访问Action中的数据、OGNL同样可以访问Action以外的数据,如request、session、application等,这些数据都存储在Stack Context中,注意,访问Stack Context需要加上”#”

  • action配置
<action name="gotoHousePage2" class="com.pb05.demo02.StudentsAction" method="gotoHousePage">
    <result>/jsp/05_OGNL访问值栈和StackContext/02_访问StackContext.jsp</result>
</action>
  • action类代码
public class StudentsAction extends ActionSupport {

    public String gotoHousePage() {
        ActionContext.getContext().getSession().put("uname", "张三");
        return SUCCESS;
    }

}
  • 输出页面
<body>
<s:property value="#session.uname"/>
</body>
  • 输出结果

这里写图片描述


三、访问集合

演示使用OGNL访问集合属性

  • action配置
<action name="list_*" class="com.pb05.demo03.OgnlAction" method="{1}">
    <result>/jsp/05_OGNL访问值栈和StackContext/03_访问集合.jsp</result>
</action>
  • action类代码
public class OgnlAction extends BaseAction {
    public String list() throws Exception {
        ArrayList<User> list = new ArrayList<User>();
        User u1 = new User("accp", "accp", "123");
        User u2 = new User("pb", "pb", "123");
        list.add(u1);
        list.add(u2);
        request.put("list", list);
        return SUCCESS;
    }

    public String map() throws Exception {
        User u1 = new User("accp", "accp", "123");
        User u2 = new User("pb", "pb", "123");
        HashMap<String, User> map = new HashMap<String, User>();
        map.put("m1", u1);
        map.put("m2", u2);
        request.put("map", map);
        return SUCCESS;
    }
}
  • 输出页面关键代码
<body>
list集合中大小:
    <s:property value="#request.list.size()"/>
    <hr/>
判断集合是否为空:
    <s:property value="#request.list.isEmpty()"/>
    <hr/>
集合中的第一个元素:
    <s:property value="#request.list[0]"/>
    <hr/>
遍历集合中的元素:<br/>
    <s:iterator value="#request.list" var="user">
        用户名:<s:property value="#user.username"/><br/>
    </s:iterator>
    <hr/>
map集合大小:
    <s:property value="#request.map.size()"/>
    <hr/>
map集合keys:
    <s:property value="#request.map.keys"/>
    <hr/>
map集合values:
    <s:property value="#request.map.values"/>
    <hr/>
遍历map集合元素:
    <br/>
    <s:iterator value="#request.map.values" var="keys">
        <s:property value="#keys.username"/>
        <br/>
    </s:iterator>
</body>
  • 输出结果

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值