zoukankan      html  css  js  c++  java
  • Struts2 ONGL表达式

    OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言。

    OGNL的引入

    1.ognl访问数据,以下将几种获取方式做了示例:

    Action类

        public String test(){
            //获取狭义上的值栈
            context=ActionContext.getContext();         
            ValueStack valueStack=context.getValueStack();
            valueStack.set("name", "张三(valueStack)中的");
            
            //获取广义上的值栈
            //获取reqeust中的
            Map<String, Object> reqeust=(Map<String, Object>) context.get("request");
            reqeust.put("name", "李四(reqeust)中的");
            
            //获取session中的数据
            Map<String, Object> session=context.getSession();
            session.put("name", "王五(session)中的");
            
            //获取session中的数据
            Map<String, Object> application=context.getApplication();
            application.put("name", "赵六(application)中的");
            
            return SUCCESS;
        }

    JSP页面

    <body>
    获取侠义上的值栈数据: <s:property value="name" /><br>
    获取广义上的值栈数据<br>
    获取请求的参数数据:  <s:property value="#parameters.name" /><br>
    获取reqeust中的数据: <s:property value="#request.name" /><br>
    获取session中的数据: <s:property value="#session.name" /><br>
    获取application中的数据: <s:property value="#application.name" /><br>
    
    #attr 按照 page,reqeust,session,application顺序查找<br>
    获取attr:<s:property value="#attr.name" />
    </body>

    显示结果

    2.ognl访问复杂对象:

    Action类

    public String test(){
            //访问javaBean对象
            student=new Students("张三","15");
            
            //访问对象集合
            list=new ArrayList<Students>();
            list.add(new Students("李四","集合成员一"));
            list.add(new Students("王五","集合成员二"));
            
            //访问map对象
            studentMap=new HashMap<String,Students>();
            studentMap.put("好学生", new Students("学霸","20"));
            studentMap.put("差学生", new Students("学渣","20"));
            return SUCCESS;
        }

    JSP页面

    <body>
    OGNL访问javaBean对象:  <s:property value="student.name" /><s:property value="student.age" />岁了</br>
    OGNL访问对象List集合:  <s:property value="list[0].name" /><s:property value="list[0].age" /><br>
                        <s:property value="list[1].name" /><s:property value="list[1].age" /><br>
    OGNL访问对象Map集合:  <s:property value="studentMap['好学生'].name" /><s:property value="studentMap['好学生'].age" />岁了<br>
                        <s:property value="studentMap['差学生'].name" /><s:property value="studentMap['差学生'].age" />岁了<br>
                        <!-- ['好学生']这里面是map中的key值 -->
    </body>

    显示结果:

    2.ognl访问静态属性和方法:

    创建一个静态类:

    package com.maya.ognl;
    
    public class StaticOgnl {
        public static String str="Answer";
        
        public static String printStr(){
            str+="这是我的静态方法";
            System.out.println(str);        
            return str;
        }
    }

    JSP页面访问静态属性与方法:

    <body>
    OGNL访问静态属性: <s:property value="@com.maya.ognl.StaticOgnl@str" /><br>
                        <!-- @包名加类名 @属性名 -->
    OGNL访问静态方法: <s:property value="@com.maya.ognl.StaticOgnl@printStr()" />
                        <!-- @包名加类名 @方法名() -->
    </body>

    显示结果:

     当访问静态方法与属性时,要在xml文件中配置一条语句,用来允许其调用。语句如下:

    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
  • 相关阅读:
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    C语言控制台窗体图形界面编程(总结)
    linux下c程序 daemon、fork与创建pthread的顺序问题
    内存动态分配与释放
    MyReport报表系统v1.2公布
    AutoLayout初战----Masonry与FDTemplateLayoutCell实践
    算法与数据结构题目的 PHP 实现:栈和队列 设计一个有 getMin 功能的栈
    药店从业者,不能不知的数据分析方法
    药店从业者,不能不知的数据分析方法
    SAS之大话PDV
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6551306.html
Copyright © 2011-2022 走看看