标签:
先了解一下OGNL的概念
OGNL的全名称Object Graph Navigation Language。全称为对象图导航语言,是一种表达式语言。使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。
OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。
| 1 2 3 | publicString getSavePath() {    returnServletActionContext.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 | packagecn.action;importcn.entity.User;importcom.opensymphony.xwork2.ActionSupport;publicclassExecuteAction extendsActionSupport{    privateUser user;    privateString okpwd;        @Override    publicString execute() throwsException{        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()){            returnINPUT;        }        returnSUCCESS;    }    publicUser getUser() {        returnuser;    }    publicString getOkpwd() {        returnokpwd;    }    publicvoidsetUser(User user) {        this.user = user;    }    publicvoidsetOkpwd(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"/> | 
标签:
原文地址:http://www.cnblogs.com/zsping/p/5945280.html