ognl

摘要:
OGNL上下文实际上是一个Map对象,由OGNL.OgnlContext类表示。Struts2始终将当前Action实例放置在堆栈的顶部。因此,在OGNL中引用Action中的属性时,也可以省略“#”。需要使用#访问放置在调用ActionContext的put中的数据。事实上,#相当于ActionContext。getContext()#session.msg表达式等效于.123publicStringgetSavePath(){returnServletActionContext.getServletContext().getRealPath;}2。用于筛选和投影集合1Persons{?1#{'fo1':'bar1','foo2':'bar2'}%:%符号的目的是在标志的属性为字符串类型时,将计算机OGNL表达式$:用于两个目的。1.在国际资源中,引用OGNL表达式,例如国际资源文件中的代码:reg.agerange=国际资源信息:age必须介于${min}和${max}之间。

OGNL的全名称Object Graph Navigation Language。全称为对象图导航语言,是一种表达式语言。使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。

OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。

值栈(ValueStack) :
可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。
Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。
调用ActionContext的put(key,value)放入的数据,需要使用#访问。
 
 ODNL中有重要的三个符号: # % $
#:一般有三种用途
1.访问非跟对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于。
1
2
3
public String getSavePath() {
    return ServletActionContext.getServletContext().getRealPath(savePath);
            }

2.用于过滤和投影(projecting)集合

1
persons.{?#this.name=='pla1'}.{age}[0]。

3.用于构造map。

1
#{'foo1':'bar1''foo2':'bar2'}

%:

%符号的用途是在标志的属性为字符串类型时,计算机OGNL表达式

$:主要有两种用途

1.在国际化资源中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

2.在Struts2框架的配置文件中引用OGNL表达式.例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
<validators>
    <field name="user.username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用户名不能为空</message>
        </field-validator>
        <field-validator type="stringlength">
            <param name="maxLength">10</param>
            <param name="minLength">6</param>
            <message>用户名长度必须在${minLength}和${maxLength}之间</message>
        </field-validator>
    </field>
</validators>

action类ExecuteAction.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package cn.action;
 
import cn.entity.User;
 
import com.opensymphony.xwork2.ActionSupport;
 
public class ExecuteAction extends ActionSupport{
    private User user;
    private String okpwd;
     
    @Override
    public String execute() throws Exception{
        if(user.getUsername().length()==0){
            addFieldError("username""用户名不能为空");
        }
        if(user.getUserpwd().length()==0){
            addFieldError("userpwd""密码不能为空");
        }
        if(!user.getUserpwd().equals(okpwd)){
            addFieldError("userpwd""两次密码必须一致");
        }
        //捕获错误信息   返回input
        if(this.hasFieldErrors()){
            return INPUT;
        }
        return SUCCESS;
    }
    public User getUser() {
        return user;
    }
    public String getOkpwd() {
        return okpwd;
    }
    public void setUser(User user) {
        this.user = user;
    }
    public void setOkpwd(String okpwd) {
        this.okpwd = okpwd;
    }
}

总结OGNL的使用方法

访问属性

1
2
3
4
<s:textfield name="user.username" label="用户名"></s:textfield>
    <br/>
    <s:textfield name="user.userpwd" label="密码"></s:textfield>
    <br/>

访问方法

1
调用值栈中对象的普通方法:<s:property value="user.get()"/><br>

访问构造方法

1
调用普通类的构造方法:<s:property value="new struts.vo.Student('小明' , '男' , 3 , 25).username"/>

免责声明:文章转载自《ognl》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题.Net ( C# ) 调用控制台程序并取得输出结果下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

J2EE学习篇之--Struts2技术详解

前面说到了Struts1的相关知识,下面来说一下Struts2的相关知识,我们知道现在Struts2使用的比Struts1多,Struts2已经替代Struts1成为主流的框架了。。。 摘要Struts2是在WebWork2基础发展而来的。和struts1一样, Struts2也属于MVC框架。不过有一点大家需要注意的是:尽管Struts2和Struts...

struts.xml中可以使用el表达式和ognl表达式

转自:http://blog.csdn.net/hzc543806053/article/details/7538723 文件上传链接: 1)Servlet 文件上传 ————  点击打开链接 2)Struts2 文件上传 ———— 点击打开链接 文件下载是一个很常见的功能,用struts2实现文件下载的步骤: 一)定义一个Acti...

struts2 s2-032漏洞分析

0x01Brief Description       最近面试几家公司,很多都问到了s2漏洞的原理,之前调试分析过java反序列化的漏洞,觉得s2漏洞应该不会太难,今天就分析了一下,然后发现其实漏洞的原理不难,但是搭建j2ee调试的环境花了将近半天的时间QAQ.       Struts 是Apache软件基金会(ASF)赞助的一个开源项目,通过采用Ja...

EL,OGNL表达式 $ % #

1、OGNL表达式依赖于struts2标签,必须结合struts2标签使用, %”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。 <s:a href="http://t.zoukankan.com/getThemeMsg.action?tea_id= %{#session.loginUser.teacher.tea_id}" css...

在Apache Struts中利用OGNL注入

前言 本文简要介绍了Apache Struts的OGNL注入缺陷,文章中介绍使用简单的应用程序复现OGNL注入。深入研究针对公共漏洞,并理解这类漏洞。 内容 安装Apache Tomcat服务器(入门) 熟悉Java应用程序在服务器上的工作方式(Web服务器基础知识) Struts应用程序示例(Struts应用程序示例) 表达语言注入(表达式语言注入) 了...