食品安全法10倍赔偿:ognl全面总结

来源:百度文库 编辑:九乡新闻网 时间:2024/05/08 18:48:30
struts2总结之 OGNL表达式 收藏      最近的项目开发中使用了struts2的框架,但是好多人都不清楚struts2的标签的具体的用法,
要想完全掌握struts2标签的用法,那么你必须先精通了struts2中OGNL的用法。struts2中很多东
西其实理解就行,但是惟独OGNL虽然内容不多,但是确必须的精通,这是学习struts2的基础。      Struts2 中内置了OGNL表达式的支持,使得Struts2的具有比Struts1更为强大的数据访问的功能。
本文主要讲解OGNL的使用方法,并不会去讲解一些原理性的东西,想要了解的朋友可以自己去查阅相关的资料     
     在OGNL的使用主要分以下部分来讲解:
1.使用OGNL访问对象(不同范围的取值) 2.OGNL的集合操作(OGNL元素符,以及过滤和投影功能) 3.OGNL访问静态成员(怎么访问静态成员) 4. lambda表达式,在OGNL中使用一些简单的函数以及OGNL总结(在总结之后会详解Struts2的标签的使用)
一、使用OGNL访问对象    1 读取struts2中的ValueStack中的值      struts2中引入了ValueStack的概念,在struts2中默认使用ValueStack作为OGNL的StackContext的根元素    OGNL在读取根元素的时候能够直接进行读取      假设action中有      private Cat cat;  private Dog dog; 俩个对象,那么在jsp页面读取方法就是       读取Cat的name属性的值       读取Dog的name属性值    2 使用#读取parameters  request  session  application 范围内的值()
       相当于 request.getAttribute("id")        相当于 request.getParameter("id")        相当于 session.getAttribute("id")        相当于 application.getAttribute("id")         依次搜索PageContext HttpServletRequest   HttpSession  ServletContext 范围 ,查找属性,找到为止
二、OGNL的集合操作    1 创建一个集合     {e1,e2,e3} 直接创建一个List类型的集合     #{Key1:Value1,Key2:Value2} 构建一个Map类型的集合     使用:             在ValueStack范围内找到id的值, 并用它作为key去查找对应的                                          value 并显示出来  
   2 OGNL元素符
     对于集合,OGNL提供了两个元素符:in和not in,其中in判断某个元素是否在指定集合中;not in则用于     判断某个元素是否不在指定集合中。     判断一个对象是否在List内存在:          muhahaha             boo   
         muhahaha             boo       3 过滤与投影集合      假设有一个books的List集合存在于ValueStack中,存放了多个Book类型的对象       我们可以通过这样进行过滤取值      这样只会取到价格大于35的书籍,很好的起到了过滤的      作用,      ?取出所有符合逻辑的元素      ^ 取出符合逻辑的第一个元素      $ 取出符合逻辑的最后一个元素 三、OGNL访问静态成员     在实际的开发中像页面的参数传递是绝对拒绝使用硬编码的,最好的解决方式有2种:一种是写在国际化配置文件中;另外的一种就是建立一个类,专门维护静态成员,所有硬编码的地方都调用它就可以了。     struts2 中默认提供了一些访问静态成员的方式,但是默认是关闭的,所以应该在struts2的配置文件中先设置       设置之后就可以用以下的表达式来访问静态成员了。   1 访问静态方法        2 访问静态常量      四、lambda表达式,在OGNL中使用一些简单的函数以及OGNL总结    1 lambda表达式      这个表达式,我其实也很少去用,这里给大家拿个例子讲解一下吧           这句的作用就是,value="#conv =:   定义一个函数 conv      [#this==1?'男'       定义 conv(1)=男      #this==2?'女'        定义 conv(2)=女      当然这个只是一个简单的例子,这里支持复杂的函数运算。对于一些简单的逻辑更推荐使用struts2的标签来处理。复杂点的不做具体讲解,引用别人的一个例子   
例如: 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表示表达式的参数。例如:

#fib =:[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)]定义了一个Lambda表达式,
#fib(11) 调用了这个表达式。
   2 总结
     这里主要讲解一下使用注意事项
        如果你这样使用标签 ,那么它绝对不会是你想要的,它会按照你的
                                       输入原样的输出的  #foobar['foo1']
    正确的使用:      %{} 用于对括号内用ognl求值
    struts2的action,大家都习惯了生成get与set方法,其实新版的没有这俩个方法也能插值进去的,它采用了java的反射机制来实现,不过官方还是建议按照旧的方法用。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zeng_84_long/archive/2011/01/04/6115665.aspx