zoukankan      html  css  js  c++  java
  • Java知识总结-9

    OGNL
    是在对象图中找到对象和方法属性的语言 是一个独立的功能项目

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。


    ognl 表达式的表单标签 name 属性是ognl 表达式
    非表单标签所有value 属性是 ognl 表达式


    OGNL是通常要结合Struts 2的标志一起使用。主要是#、%和$这三个符号的使用
    ------------
    #”主要有三种用途:
    访问OGNL上下文和Action上下文,
    #相当于ActionContext.getContext();
    下表有几个Acti onContext中有用的属性: 名称 作用 例子
    parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameterValues("id").get(0);
    request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")
    session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")
    application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")
    attr 用于按request > session > application顺序访问其属性(attribute)

    1.#用于从ognl 的map 集合取值指定根(key)
    2.#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
    3.构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
    --------------
    “%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。
    -------------
    “$”有两个主要的用途,用于在国际化资源文件中,引用OGNL表达式。在Struts 2和i18n中配置文件


    表达式的使用:
    ------------
    1. 基本对象树的访问
    对象树的访问就是通过使用点号将对象的引用串联起来进行。
    例如:xxxx,xxxx.xxxx,xxxx. xxxx. xxxx. xxxx. xxxx
    2. 对容器变量的访问
    对容器变量的访问,通过#符号加上表达式进行。
    例如:#xxxx,#xxxx.xxxx,#xxxx.xxxxx.xxxx.xxxx.xxxx
    3. 使用操作符号
    OGNL表达式中能使用的操作符基本跟Java里的操作符一样,除了能使用 +, -, *, /, ++, --, ==, !=, = 等操作符之外,还能使用 mod, in, not in等。
    4. 容器、数组、对象
    OGNL支持对数组和ArrayList等容器的顺序访问:例如:group.users[0]
    同时,OGNL支持对Map的按键值查找:
    例如:#session['mySessionPropKey']
    不仅如此,OGNL还支持容器的构造的表达式:
    例如:{"green", "red", "blue"}构造一个List,#{"key1" : "value1", "key2" : "value2", "key3" : "value3"}构造一个Map
    你也可以通过任意类对象的构造函数进行对象新建:
    5.对静态方法或变量的访问
    要引用类的静态方法和字段,他们的表达方式是一样的@class@member或者@class@method(args):
    例如:@com.javaeye.core.Resource@ENABLE,@com.javaeye.core.Resource@getAllResources
    6. 方法调用
    直接通过类似Java的方法调用方式进行,你甚至可以传递参数:
    例如:user.getName(),group.users.size(),group.containsUser(#requestUser)
    7. 投影和选择
    OGNL支持类似数据库中的投影(projection) 和选择(selection)。
    投影就是选出集合中每个元素的相同属性组成新的集合,类似于关系数据库的字段操作。投影操作语法为 collection.{XXX},其中XXX 是这个集合中每个元素的公共属性。
    例如:group.userList.{username}将获得某个group中的所有user的name的列表。
    -----------------
    选择就是过滤满足selection 条件的集合元素,类似于关系数据库的纪录操作。选择操作的语法为:collection.{X YYY},其中X 是一个选择操作符,后面则是选择用的逻辑表达式。而选择操作符有三种:
    ? 选择满足条件的所有元素
    ^ 选择满足条件的第一个元素
    $ 选择满足条件的最后一个元素
    例如:group.userList.{? #txxx.xxx != null}将获得某个group中user的name不为空的user的列表。

  • 相关阅读:
    关于ArcGIS Server VS2010无法显示发布的地图服务
    NDK,动态链接库,JNI
    android开发中一些报错的解决方法
    查询死锁对象
    pb导入excel文件
    n_cst_ping在powerbuilder 11 中的变化,一面的程序可正常ping
    SQL拼音
    数据库优化
    android调用asp.net webservice,返回json结构
    iframe内部需要弹出浮层问题
  • 原文地址:https://www.cnblogs.com/flytwosky/p/6977702.html
Copyright © 2011-2022 走看看