zoukankan      html  css  js  c++  java
  • ognl

     OGNL(Object-Graph Navigation Language)全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

    ognl的特点:

    a、支持对象的方法调用,形式,eg:objName.methodName();

    b、支持静态类的方法调用和值访问,expression:@【类全名(包括包路径)】@【方法名|值名】,eg:@tutorial.MyConstant@App_NAME;

    c、支持赋值操作和表达式串联,eg:price=100,discount=80,calculatePrice()//返回80???

    d、访问OGNL上下文(OGNL context)和ActionContext

    e、操作集合对象

    使用ognl表达式:

    1)“#”符号有三种用途

    a、访问非根对象(struts中值栈为根对象),eg:OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

    名称   作用域 

    eg:

    1-1)parameters :包含当前HTTP请求参数的Map

    #parameters.id[0]=>作用相当于request.getParameter("id")

     

    1-2)request:包含当前HttpServletRequest的属性(attribute)的Map

    #request.userName=>作用相当于request.getAttribute("userName");

     

    1-3)session:包含当前HttpSession属性(attribute)的Map

    #session.userName=>session.getAttribute("userName");

     

    1-4)application:包含当前应用的ServletContext的属性(attribute)的Map

    #application.userName=>application.getAttribute("userName");

     

    演示案例

    复制代码
    public class ValueStackAction extends ActionSupport {
        private User user;
        
       public User getUser() {
            return user;
        }
    
        public void setUser(User user) {
            this.user = user;
        }
    
    
    public String execute(){
           HttpServletRequest request=ServletActionContext.getRequest();
           ValueStack vs=(ValueStack) request.getAttribute("struts.valueStack");
          UserInfo info=new UserInfo();
          info.setPassword("111");
          info.setUsername("呵呵");
          
          vs.getRoot().add(info);
           
           //vs.getContext().put("info",info);
          
           return SUCCESS;
       }
    }
    复制代码

    页面运行结果:

    可以看到确实获取到了Username的值

    复制代码
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
      Welcome!!!!
      <s:debug></s:debug> 
      <s:property value="username"/>
     
      </body>
    复制代码

    OGNL 过滤与投影

     

    Struts2 OGNL中的投影(过滤)

    <s:property value="users.(?#this.age==1)"/>

    获得是一个User的对象的一个集合

    <s:property value="users.(?#this.age==1).{age}"/>

    获得满足条件的这样一个集合中的age值;注意{age},花括号在OGNL中本身代表着

    是一个集合

    <s:property value="users.(?#this.age==1)[0]"/>

    获得满足条件的这个集合的第一个元素

    <s:property value="users.(^#this.age>1).{age}"/>

    获得大于一的集合的元素里面,开头一个age值的集合

    <s:property value="users.($#this.age>1).{age}"/>

    获得大于一的集合的元素里面,结尾一个age值的集合

    <s:property value="users.(^#this.age>1).{age} == null"/>

    return false;

  • 相关阅读:
    java_类承继其他类的内部类例子
    java_接口和抽象类的区别
    java_数组作缓存池的不可变类实例
    C++_归并排序(纯C版)
    C++_归并排序
    C++_快速排序(纯C版本)
    C++_快速排序
    C++_直接插入排序(纯C版)
    C++_直接插入排序
    自定义比较器的用法
  • 原文地址:https://www.cnblogs.com/lizeyang/p/5945254.html
Copyright © 2011-2022 走看看