zoukankan      html  css  js  c++  java
  • OGNL的学习

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

    基本介绍:

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样可以更好的取得数据。OGNL可以让我们用非常简单的表达式访问对象层,例如,当前环境的根对象为user1,则表达式person.address[0].province可以访问到user1的person属性的第一个address的province属性。这种功能是模板语言的一个重要补充,像jsp2.0,velocity,jelly等等,都有类似的功能,但是ognl比它们完善得多,而且以一个独立的lib出现,方便我们构建自己的框架。webwork2和现在的Struts2.x中使用OGNL取代原来的EL来做界面数据绑定,所谓界面数据绑定,也就是把界面元素(例如一个textfield,hidden)和对象层某个类的某个属性绑定在一起,修改和显示自动同步。
    struts1.x的formbean相比,这样做的好处非常明显:在webwork中不需要为每个页面专门写formbean,可以直接利用对象层的对象。例如在对象设计中,我们的User和Person是分开的,而一个注册用户界面需要填写两者的内容,在webwork中,就可以保持后台的对象结构,把属于用户属性的界面元素用user.person.xxx绑定,把属于账号属性的界面元素用user.xxx绑定。

    在struts2中

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言,使页面更简洁;
    支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;
    Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:
    支持对象方法调用,如xxx.doSomeSpecial();
    支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
    支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(price*discount),这个表达式会返回80;
    访问OGNL上下文(OGNL context)和ActionContext;
    操作集合对象。
    可以直接new一个对象

    具体用法:

    #”主要有三种用途:
    访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();
    下表有几个ActionContext中有用的属性: 名称 作用 例子
    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) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
    用于过滤和投影(projecting)集合,如books.{?#this.price<100};
     
    (来自百度百科)
     
     
  • 相关阅读:
    【转】The final local variable xxx cannot be assigned, since it is defined in an enclosing type
    Android开发UI之手动显示和隐藏软键盘
    ListView使用CursorAdapter增加和删除item
    转:LayoutInflater作用及使用
    Android开发之ContentValues
    Android开发:向下一个activity传递数据,返回数据给上一个activity
    Android开发之bug-No Activity found to handle Intent
    Android学习Service中遇到的问题
    You must supply a layout_width attribute的错误原因及解决办法
    Android:EditText 属性
  • 原文地址:https://www.cnblogs.com/Ankermaker/p/6899074.html
Copyright © 2011-2022 走看看