• Struts2中的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;

  • 相关阅读:
    夜半随笔
    VC6.0 工程转到VS2008一些问题
    没有找到MSVCR90.dll,因此这个应用程序未能启动,重新安装应用程序可解决
    开源中国
    保存桌面图标的次序吧
    2008下,错误:fatal error C1853
    生成成功,调试时出现错误导致中断Unhandled exception at 0x41cd7fb0 in webcam.exe: 0xC0000005: Access violatio
    opencv安装可能没注意的细节
    error PRJ0003 : 生成“cl.exe”时出错
    wince对话框添加菜单
  • 原文地址:https://www.cnblogs.com/Smile-123/p/5944737.html
Copyright © 2020-2023  润新知