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

    1.ognl表达式和el表达式的区别

      1)el/jstl 是sun公司的标准,而ognl不是(所有更加推荐使用el/jstl)

      2)ognl一定要配合Struts2的标签一起使用

    2.ognl表达式的作用(前提是配合struts2的标签)

      1)取值

      2)创建List和Map对象:创建List对象"{'list0','list2','list3'}"创建Map对象:"#{"key1":value1,"key2":value2}";

      3)判断元素在不在集合中: 关键字in、not int 比如 "'list0' in {'list0','list2','list3'}"

      4)投影(过滤、筛选):Books.{?#this.price>60} 整个表示从Books集合中根据条件一个筛选出来的子集合,用来遍历即可

    3.ognl表达式注意的地方

      1)ValueStack(值栈):将一次请求涉及到的数据进行了封装;值栈是线程安全的,每一次请求都会创建一个

      2)ValueStack 将servlet api对象对数据的操作进行了封装。就像Spring MVC中的Model类一样

      3)OGNL Context在struts2 中就是ActionContext(Map数据类型)。

      4)ValueStack是OGNLContext的根元素。用ognl表达式访问根元素时不需要加上#。访问非根元素是需要加上#,比如request:#request.属性名

      5)一个访问过来,先创建ActionContext对象,再创建ValueStack对象,再创建Action类对象,再将Action对象放入ValueStack对象中。也就是说,Action对象以及该对象的属性都是存放在OGNLContext的根对象中,用ognl表达式访问的时候不需要加上#。

      6)ognl表达式查找的顺序:

          ValueStack中有个root变量,存放了很多对象,root中存放的第一个对象叫做栈顶对象。ognl表达式查找的顺序就是先从栈顶对象开始找,找不到就再往后找。所以当栈顶对象和后面的对象有相同的属性时,页面的ognl表达式仅为属性名时,这就导致页面显示的是栈顶对象的属性值,而不是后面对象的属性值。

          这个查找顺序也导致,用ognl表达式查找ValueStack中对象的属性的时候直接写属性名就行。但是查找非ValueStack对象里的对象的属性的时候,就需要加上对象名以及属性比如:#session.item.address。。。。对应的El表达式为:${item.address},el表达式也并不是直接写属性。这和访问ValueStack中对象的属性是有区别的,那么el表达式要指定去什么范围找应该显式的加上范围而不是按照它默认的顺序,例如 ${sessionScope.item.address},这就能解决同名属性放在不同域中,界面根据需要显示指定域中的属性值。

      7)el表达式在strtus中除了能访问原来能访问 的域(page,request,session,application)之外,还能访问ValueStack里的数据,这个功能是有struts框架扩展的

      8)OGNL和EL表达式都能够按照正确的语法方法访问 Struts包装的request,session等对象和Servlet API 中的request,session等对象。且访问这俩套api时的语法规则一样

      9)ValueStack存值和request(原生的和包装的都行)存值可以混合使用

    更多细节参考链接:http://blog.csdn.net/resigshy/article/details/7560573

  • 相关阅读:
    NetBeansRCP-添加/修改NetBeans的JVM启动参数
    (OK) install Android Studio 3.2 preview on Fedora 27
    (OK) Research, implementation, and improvement of MPTCP on mobile smart devices
    android-ktx
    ARM要risk(危险)了!开源的RISC-V来了,这不是危言耸听!
    表情符号大全
    (OK) Fedora 27
    Latex写算法的伪代码排版
    中国论文数超过美国 施一公:“垃圾文章”太多
    TCP/IP重传超时--RTO
  • 原文地址:https://www.cnblogs.com/wanjn/p/7398297.html
Copyright © 2011-2022 走看看