第四章:struts2中的OGNL.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OGNL引用Action的属性 OGNL是一个对象,属性的查询语言。在OGNL中有一个类型为Map的Context(称为上下文),在这个上下文中有一个根元素(root),对根元素的属性的访问可以直接使用属性名字,但是对于其他非根元素属性的访问必须加上特殊符号#。 因为Action实例被放在Value Stack中,而Value Stack又是根元素(root)中的一个,所以对Action中的属性的访问可以不使用标记#,而对其他的访问都必须使用#标记。 s:property value=postalCode/ ActionContext中的其他非根(root)元素的属性可以按照如下的方式访问: s:property value=#session.mySessionPropKey/ or s:property value=#session[mySessionPropKey]/ or s:property value=#request[mySessionPropKey]/ Action类可以使用ActionContext中的静态方法来访问ActionContext。 ActionContext.getContext().getSession().put(mySessionPropKey, mySessionObject); OGNL与Collection(Lists,Maps,Sets) 生成List的语法为: {e1,e2,e3}. s:select label=label name=name“ list={name1,name2,name3} value=%{name2} / 上面的代码生成了一个HTML Select对象,可选的内容为: name1,name2,name3,默认值为:name2。 生成Map的语法为:#{key1:value1,key2:value2}. s:select label=label name=name“ list=#{foo:foovalue, bar:barvalue} / 上面的代码生成了一个HTML Select对象,foo名字表示的内容为:foovalue,bar名字表示的内容为:barvalue。 对于集合,OGNL提供了两个元素符:in和not in,其中in判断某个元素是否在指定集合中;not in则用于判断某个元素是否不在指定集合中。 判断一个对象是否在List内存在: s:if test=foo in {foo,bar} ?? muhahaha /s:if s:else ?? boo /s:else s:if test=foo not in {foo,bar} ?? muhahaha /s:if s:else ?? boo /s:else 取得一个List的一部分: ? – 所有满足选择逻辑的对象 ^ - ??第一个满足选择逻辑的对象 $ - ??最后一个满足选择逻辑的对象 例如: person.relatives.{? #this.gender == male} 上述代码取得这个人(person)所有的男性(this.gender==male)的亲戚(relatives) Lambda 表达式 OGNL支持简单的Lambda表达式语法,使用这些语法可以建立简单的lambda函数。 例如: Fibonacci: if n==0 return 0; elseif n==1 return 1; else return fib(n-2)+fib(n-1); fib(0) = 0 fib(1) = 1 fib(11) = 89 OGNL的Lambda表达式如何工作呢? Lambda表达式必须放在方括号内部,#this表示表达式的参数。例如: s:property value=#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)], #fib(11) / #fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)]定义了一个Lambda表达式 #fib(11) 调用了这个表达式。 所以上述代码的输出为:89 声明一个使用递归来计算阶乘的函数, #fact =:[#this=1?1:#this*#fact(#this-1)],#fact(30H) 注意 在JSP2.1中#被用作了JSP EL(表达式语言)的特殊记好,所以对OGNL的使用可能导致问题, 一个简单的方法是禁用JSP2.1的EL特性,这需要修改web.xml文件: jsp-config ??? jsp-property-group ????? url-patt

文档评论(0)

0716 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档