Struts2 ONGL表达式

Posted AnswerTheQuestion

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

以上是关于Struts2 ONGL表达式的主要内容,如果未能解决你的问题,请参考以下文章

struts2 s2-062 ONGL远程代码执行

Struts2--ONGL--值栈

struts2在tomcat中的配置

struts2—OGNL

Struts2 的 OGNL

struts2的OGNL