• 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>
  • 相关阅读:
    git 同步远程分支
    git tag 打标签
    EJS 语法
    从零开始制作 Hexo 主题
    博客灵感
    java编译做了哪些事?
    java+内存分配及变量存储位置的区别[转]
    用android模拟器Genymotion定位元素
    利用securecrt在linux与windows之间传输文件
    eclipse引入tomcat
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6551306.html
Copyright © 2020-2023  润新知