Struts2 ONGL表达式

OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言。

OGNL的引入

1.ognl访问数据,以下将几种获取方式做了示例:

Action类

    public String test(){
        //获取狭义上的值栈
        context=ActionContext.getContext();
        ValueStack valueStack=context.getValueStack();
        valueStack.set("name", "张三(valueStack)中的");

        //获取广义上的值栈
        //获取reqeust中的
        Map<String, Object> reqeust=(Map<String, Object>) context.get("request");
        reqeust.put("name", "李四(reqeust)中的");

        //获取session中的数据
        Map<String, Object> session=context.getSession();
        session.put("name", "王五(session)中的");

        //获取session中的数据
        Map<String, Object> application=context.getApplication();
        application.put("name", "赵六(application)中的");

        return SUCCESS;
    }

JSP页面

<body>
获取侠义上的值栈数据: <s:property value="name" /><br>
获取广义上的值栈数据<br>
获取请求的参数数据:  <s:property value="#parameters.name" /><br>
获取reqeust中的数据: <s:property value="#request.name" /><br>
获取session中的数据: <s:property value="#session.name" /><br>
获取application中的数据: <s:property value="#application.name" /><br>

#attr 按照 page,reqeust,session,application顺序查找<br>
获取attr:<s:property value="#attr.name" />
</body>

显示结果

2.ognl访问复杂对象:

Action类

public String test(){
        //访问javaBean对象
        student=new Students("张三","15");

        //访问对象集合
        list=new ArrayList<Students>();
        list.add(new Students("李四","集合成员一"));
        list.add(new Students("王五","集合成员二"));

        //访问map对象
        studentMap=new HashMap<String,Students>();
        studentMap.put("好学生", new Students("学霸","20"));
        studentMap.put("差学生", new Students("学渣","20"));
        return SUCCESS;
    }

JSP页面

<body>
OGNL访问javaBean对象:  <s:property value="student.name" />,<s:property value="student.age" />岁了</br>
OGNL访问对象List集合:  <s:property value="list[0].name" />,<s:property value="list[0].age" /><br>
                    <s:property value="list[1].name" />,<s:property value="list[1].age" /><br>
OGNL访问对象Map集合:  <s:property value="studentMap[‘好学生‘].name" />,<s:property value="studentMap[‘好学生‘].age" />岁了<br>
                    <s:property value="studentMap[‘差学生‘].name" />,<s:property value="studentMap[‘差学生‘].age" />岁了<br>
                    <!-- [‘好学生‘]这里面是map中的key值 -->
</body>

显示结果:

2.ognl访问静态属性和方法:

创建一个静态类:

package com.maya.ognl;

public class StaticOgnl {
    public static String str="Answer";

    public static String printStr(){
        str+="这是我的静态方法";
        System.out.println(str);
        return str;
    }
}

JSP页面访问静态属性与方法:

<body>
OGNL访问静态属性: <s:property value="@[email protected]" /><br>
                    <!-- @包名加类名 @属性名 -->
OGNL访问静态方法: <s:property value="@[email protected]()" />
                    <!-- @包名加类名 @方法名() -->
</body>

显示结果:

当访问静态方法与属性时,要在xml文件中配置一条语句,用来允许其调用。语句如下:

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
时间: 2024-10-12 16:01:41

Struts2 ONGL表达式的相关文章

struts2 OGNL表达式

五.OGNL简介(非常重要) 1.什么是OGNL OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个单独的开源项目. Struts2框架使用OGNL作为默认的表达式语言. 2.OGNL的功能 前提:OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库 2.1.支持普通方法的调用 1 <%@ page language="java" import=&qu

struts2 ognl表达式访问值栈

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

struts2 ongl

简介: OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,它是一种功能强大的开源表达式语言,比EL(只能从域或内置对象中)表达式更强大,使用这种表达式语言,可以通过某种表达式语法,OGNL可以存取Java任意对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换.如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁. OGNL的操作实际上就是围绕着OGNL结构的三个要素而进行的,

表达式语言之ongl表达式

OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型转换等功能. 为什么使用OGNL 相对于其它的表达式语言,OGNL的功能更为强大,它提供了很多高级而必需的特性,例如强大的类型转换功能.静态或实例方法的执行.跨集合投影,以及动态lambda表达式定义等.OGNL基础 OGNL表达式的计算都是围绕OGNL上下文来

ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)

在用户是否拥有某项权限的问题  是这样解决的: 用户登录之后  登录信息是保存在session域中的  通过el表达式可得到登录的对象信息  那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 那么登录或者不登录  访问首页的时候 就会显示所有的权限列表(即操作菜单) 这些权限信息是在服务器启动的时候  检索并且保存在了application中的(可以看上一篇博客总结)  所以在遍历的时候 如果不加判断  默认显示的是所有的权限信息  即操作菜单 首先理清思路  user用户 中存在ro

深入分析JavaWeb 48 -- Struts2中OGNL表达式与ValueStack

一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作为默认的表达式语言. OGNL相对其它表达式语言具有下面几大优势: 1.支持对象方法调用,如xxx.doSomeSpecial(): 2.支持类静态的方法调用和值访问,表达式的格式: @[类全名(包括包路径)]@[方法名 | 值名],例如:@[email protected]('foo %s', '

粗浅看Struts2和Hibernate框架

----------------------------------------------------------------------------------------------[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52424578作者:朱培      ID:sdksdk0      邮箱: [email protected] --------------------------

JSTL、EL、ONGL、Struts标签的区别与使用

 一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以使用定制标签库,Jstl使JSP开发开发者可以减少对脚本元素的需求,甚至可以不需要它们. 定义 JSTL(JSP StandardTagLibrary,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的.JSTL只能运行在支持JSP1.2和Ser

JavaEE学习笔记之SSH—Struts2(3)

一.action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如: 通过页面要把id=1 name=tom age=20这三个参数传给action 1.action里面定义三个成员变量id name age,这三个变量的名字一定要和所传变量的名字一致. 2.提供get.set方法 3.将来页面把这三个参数传过来的时候,struts2框架会自动的帮我们把这个三个参数值放action中的三个属性里面.(同时还做了类型的转换) 注意:这个工作其实是由defaultStack这个拦截器栈里面的