zoukankan      html  css  js  c++  java
  • struts2 OGNL 表达式

    一、Struts 2支持以下几种表达式语言:

    OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;
    JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;
    Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;
    Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。


    Struts 2默认的表达式语言是OGNL

    二、它相对其它表达式语言具有下面几大优势

    1. 支持对象方法调用,如xxx.doSomeSpecial();
    2. 支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;
    3. 支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;
    4. 访问OGNL上下文(OGNL context)和ActionContext
    5. 操作集合对象

     三、# 的使用

      访问OGNL上下文和Action上下文

     名称 作用 例子
    #parameters 包含当前HTTP请求参数 #parameters.id
    #request 包含当前HttpServletRequest属性 #request.userName
    #session 包含当前HttpSession的属性 #session.userName
    #application 包含当前应用的ServletContext的属性 #application.userName
    #attr 按request > session > application顺序访问其属性 #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止

      用于过滤和投影集合

    <s:iterator value="books.{?#this.price > 35}">
    </s:iterator>

      构造Map

    <s:set name="cities" value="#{'beijing':'北京','shanghai':'上海'}"/>

     OGNL上下文中只有一个根对象,而Struts2为我们定义了很多对象,分别是"ValueStack","Parameters","Session","Request","Application","Attr"。

    其中"ValueStack"被设置为上下文的根对象。

    访问非根对象必须加"#"

    "%{}"的含义是告诉标签的处理类,它包含的字符串按照OGNL的表达式处理。若处理类的属性值默认为OGNL表达式处理,则忽略"%{}",所以建议使用OGNL时加上"%{}"

    OGNL必须通过getters方法进行导航

  • 相关阅读:
    Netty 零拷贝(一)Linux 零拷贝
    启动服务(上)服务端:NioServerSocketChannel 是什么时候激活的
    Reactor 模型(一)基本并发编程模型
    并发编程(三)Promise, Future 和 Callback
    并发编程(二)concurrent 工具类
    并发编程(一)同步类容器和并发类容器
    Executor(二)ThreadPoolExecutor、ScheduledThreadPoolExecutor 及 Executors 工厂类
    Executor(一)ExecutorService 线程池
    Java NIO系列教程(一四) Files
    Java NIO系列教程(一三) Path
  • 原文地址:https://www.cnblogs.com/DajiangDev/p/3399125.html
Copyright © 2011-2022 走看看