- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OGNL详解
struts2 OGNL首先了解下OGNL的概念:OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。此外,还得先需弄懂OGNL的一些知识:1.OGNL表达式的计算是围绕OGNL上下文进行的。OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:s:propertyvalue=xxx/。3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。4.值栈(ValueStack) :可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。OGNL中重要的3个符号:#、%、$:#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分,需要时间的积累才渐渐弄清楚……1.#符号#符号的用途一般有三种。—访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(msg)?。—用于过滤和投影(projecting)集合,如persons.{?#this.age25},persons.{?#==pla1}.{age}[0]。—用来构造Map,例如示例中的#{foo1:bar1,?foo2:bar2}。2.%符号%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval,很暴力。3.$符号$符号主要有两个方面的用途。—在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。—在Struts 2框架的配置文件中引用OGNL表达式,例如:view plainvalidators????????field?name=intb????????????????field-validator?type=int????????????????param?name=min10/param????????????????param?name=max100/param????????????????messageBAction-test校验:数字必须为${min}为${max}之间!/message????????????/field-validator????????/field????/validators????下面通过代码对OGNL有更深的了解:action类OgnlAction.java:view plainpackage?com.tjcyjd.test.action;????import?java.util.Date;??import?java.util.LinkedList;??import?java.util.List;????import?javax.servlet.http.HttpServletRequest;????import?org.apache.struts2.ServletActionContext;??import?org.apache.struts2.convention.annotation.Action;??import?org.apache.struts2.convention.annotation.Namespace;??import?org.apache.struts2.convention.annotation.ParentPackage;??import?org.apache.struts2.convention.annotation.Result;??import?org.apache.struts2.conventi
文档评论(0)