Struts2框架使用(六)之ognl表达式获取值

OGNL 是对象图导航语言 Object-Graph Navigation Language 的缩写,它是一种功能强大的表达式语言。

我们可以使用ognl获取很多值。

例如

我们先编写一个Action,存入需要读取的数据。

package com.mrlv.action;

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

import com.mrlv.pojo.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class IndexAction extends ActionSupport{

    private String name;
    private int age;
    private Student student;
    private List<Student> students;
    private Map<String, Student> studentMap;

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        System.out.println("执行IndexAction");
        ActionContext context = ActionContext.getContext();
        // 获取狭义上的值栈
        ValueStack valueStack = context.getValueStack();
        valueStack.set("name", "张三(valueStack)");
        valueStack.set("age", 11);

        //获取二次封装的session
        Map<String, Object> session = context.getSession();
        session.put("name", "王五(session)");
        session.put("age", 13);

        //获取application
        Map<String, Object> application = context.getApplication();
        application.put("name", "赵六(application)");
        application.put("age", 14);

        student = new Student("小七", 12);

        students = new ArrayList<Student>();
        students.add(new Student("老八",13));
        students.add(new Student("老九",14));

        studentMap = new HashMap<String,Student>();
        studentMap.put("goodStudent", new Student("学霸",20));
        studentMap.put("badStudent", new Student("学渣",19));

        return SUCCESS;
    }

    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;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public Map<String, Student> getStudentMap() {
        return studentMap;
    }

    public void setStudentMap(Map<String, Student> studentMap) {
        this.studentMap = studentMap;
    }
}

如果想要调用OGNL表达式访问数据,需要在jsp头部添加struts的标签。

<%@taglib prefix="s" uri="/struts-tags" %>

OGNL 访问 ValueStack(值栈) 数据,这里获取的是

张三(valueStack)11
<s:property value="name"/>
<s:property value="age"/><br>

OGNL 访问 ActionContext 数据,访问某个范围下的数据要用#,如下

#parameters 请求参数 request.getParameter(...),这里当输入的url中携带?name=AAA&age=12,则会输出

AAA12
<s:property value="#parameters.name"/>
<s:property value="#parameters.age"/><br>

#request 请求作用域中的数据 request.getAttribute(...),输出结果

李四(request)12
  <%
     request.setAttribute("name", "李四(request)");
     request.setAttribute("age", "12");
  %>
<s:property value="#request.name" />
<s:property value="#request.age"/><br>

#session 会话作用域中的数据 session.getAttribute(...),输出结果

王五(session)13
<s:property value="#session.name" />
<s:property value="#session.age"/><br>

#application 应用程序作用域中的数据 application.getAttribute(...),输出结果

赵六(application)13
<s:property value="#application.name" />
<s:property value="#application.age"/><br>

#attr 按照 page request session application 顺序查找值,输出结果

李四(request)12
<s:property value="#attr.name"/>
<s:property value="#attr.age"/><br>

OGNL获取集合类的时候方法如下:

  ognl访问javaBean对象:<s:property value="student.name"/><s:property value="student.age"/><br>
  ognl访问List集合:<s:property value="students[0].name"/>
  <s:property value="students[0].age"/><br>
  <s:property value="students[1].name"/>
  <s:property value="students[1].age"/><br>
  ognl访问Map:<s:property value="studentMap[‘goodStudent‘].name"/>
  <s:property value="studentMap[‘goodStudent‘].age"/><br>
  <s:property value="studentMap[‘badStudent‘].name"/>
  <s:property value="studentMap[‘badStudent‘].age"/><br>

OGNL也可以通过表达式获取静态变量,或访问静态方法。

如果想要访问静态方法的话,需要在struts.xml上添加一条配置语句,访问静态变量则不用。

<!-- 使用访问静态方法的话,需要在struts.xml配置开启 -->
  <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> 

第一个@后面携带的是类的路径名,第二个@携带的是静态变量或方法。

访问静态属性: <s:property value="@[email protected]"/><br/>
  <!-- 使用访问静态方法的话,需要在struts.xml配置开启 -->
  访问静态方法:<s:property value="@[email protected]()"/>
时间: 2024-08-29 14:41:03

Struts2框架使用(六)之ognl表达式获取值的相关文章

[ SSH框架 ] Struts2框架学习之三(OGNl和ValueStack值栈学习)

一.OGNL概述 1.1 什么是OGNL OGNL的全称是对象图导航语言( object-graph Navigation Language),它是一种功能强大的开源表达式语言,使用这种表达式语言,可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换.如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁. 1.2 OGNL的作用 Struts2默认的表达式语言就是OGNL,它具有以下特点:

Struts2之 OGNL表达式和值栈

技术分析之OGNL表达式概述(了解)        1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写        * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象        * 通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能.它使用相同的表达式去存取对象的属性        2. Struts2框架使用OGNL作为默认的表达式语言 

Struts2标签库汇总和OGNL表达式语言

Struts2标签分类 UI标签:主要用于生成HTML元素的标签 非UI标签:主要用于数据访问.逻辑控制的标签 Ajax标签:用于支持Ajax的标签 表单标签(属于UI标签):用于生成HTML页面的form标签及普通表单元素的标签 非表单标签(属于UI标签):用于生产页面上的树.Tab页等标签 流程控制标签(属于非UI标签):主要包含用于实现分支.循环等流程控制的标签 数据访问标签(属于非UI标签):主要包含用于操作值栈和完成国际化功能的标签. OGNL表达式语言 (Object-Graph N

Struts2学习之路(六)—— OGNL表达式

OGNL全称为Object-Graph Navigation Language,可译为对象图导航语言.此处介绍的OGNL表达式内容,仅限于在struts2标签中应用,形式如下: <s:property value="xxx" /> 以下为列举的一些应用形式: 1.访问值栈中action的普通属性: <s:property value="username" /> 2.访问值栈中对象的属性(setter getter方法): <s:prop

struts2 ognl表达式访问值栈

1:简单的说,值栈是对应每一个请求对象的轻量级的数据存储中心,在这里统一管理着数据,供Action.Result.Interceptor等Struts2的其他部分使用,这样数据被集中管理起来而不凌乱. 简单的说,值栈能够线程安全的为每个请求提供公共的数据存取服务. 当有请求的时候,Struts2会为每个请求创建一个新的值栈,也就是说,栈和请求是一一对应的,不同的请求,值栈也不一样,而值栈封装了一次请求所有需要操作的相关的数据. 正是因为值栈和请求的对应关系,因此值栈能保证线程安全的为每个请求提供

【Struts2五】ValueStack以及ognl表达式二(常用标签)

Ognl常用标签:  1.s:debug 如果把该标签放入到s:iterator中可以看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.如果value属性不写,则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还可以以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).如果value属性不写,则默认迭代栈顶的元素 (4).如果迭代的是ma

【Struts2五】ValueStack以及ognl表达式二(经常使用标签)

Ognl经常使用标签:  1.s:debug 假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.假设value属性不写.则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还能够以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).假设value属性不写,则默认迭代栈顶的元素 (4).假设迭代的是

如何在两个jsp页面之间传值,在另外一个页面用EL表达式获取值

第一个jsp页面 <% String ids=request.getParameter("id"); int id=Integer.parseInt(ids); %> <c:set var="ses" scope="session" value="<%=id %>"></c:set> 在第一个页面中,用EL表达式存储到session作用域中,在第二个页面中再到session作用域

Struts2框架基础概念总结

一.struts2框架 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts2在Struts1融合webwork. ONGL表达式:就是对象图形化导航语言,在前端页面中,访问action的属性.方法;类似于认为就是对JSP的封装,是编程更加方便.(以下详解) 二.framework(框架) 一个基本概念上的结构,用于去解决或者处理复杂的问题,框架是在特