`
zz563143188
  • 浏览: 2264004 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
博客专栏
77fc734c-2f95-3224-beca-6b8da12debc8
编程工具介绍
浏览量:576387
D9710da2-8a00-3ae6-a084-547a11afab81
Spring Mvc实战(...
浏览量:1084501
D3f88135-07de-3968-a0f0-d2f13428c267
项目开发经验
浏览量:1650955
社区版块
存档分类
最新评论

OGNL 表达式详解(Struts2.1 )

阅读更多

Struts2.1 OGNL 表达式 学习笔记

 收集五年的开发资料下载地址:  http://pan.baidu.com/share/home?uk=4076915866&view=share

Java代码   收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@page import="com.rao.struts2.bean.Sex"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"%>  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  5. <html>  
  6.     <head>  
  7.         <title>My JSP 'OGNL1.jsp' starting page</title>  
  8.   
  9.         <meta http-equiv="pragma" content="no-cache">  
  10.         <meta http-equiv="cache-control" content="no-cache">  
  11.         <meta http-equiv="expires" content="0">  
  12.         <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  13.         <meta http-equiv="description" content="This is my page">  
  14.         <!--  
  15.     <link rel="stylesheet" type="text/css" href="styles.css">  
  16.     -->  
  17.   
  18.     </head>  
  19.   
  20.     <body>  
  21.         <%  
  22.             request.setAttribute("req""request scope");  
  23.             request.getSession().setAttribute("sess""session scope");  
  24.             request.getSession().getServletContext().setAttribute("app",  
  25.                     "aplication scope");  
  26.         %>  
  27.     1.通过ognl表达式获取 属性范围中的值  
  28.         <br>  
  29.         <s:property value="#request.req" />  
  30.         <br />  
  31.         <s:property value="#session.sess" />  
  32.         <br />  
  33.         <s:property value="#application.app" />  
  34.         <br />  
  35.         <hr>  
  36.     2.通过<span style="background-color: #fafafa;">ognl表达式创建list 集合 ,并且遍历出集合中的值  
  37.         <br>  
  38.         <s:set name="list" value="{'eeeee','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>  
  39.         <s:iterator value="#list" var="o">  
  40.             <!-- ${o }<br/> -->  
  41.             <s:property />  
  42.             <br />  
  43.         </s:iterator>  
  44.         <br />  
  45.         <hr>  
  46.     3.通过ognl表达式创建Map 集合 ,并且遍历出集合中的值  
  47.         <br>  
  48.         <s:set name="map"  
  49.             value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>  
  50.         <s:iterator value="#map" var="o">  
  51.             <!--      ${o.key }->${o.value }<br/>   -->  
  52.             <!-- <s:property value="#o.key"/>-><s:property value="#o.value"/><br/>   -->  
  53.             <s:property value="key" />-><s:property value="value" />  
  54.             <br />  
  55.         </s:iterator>  
  56.         <br />  
  57.         <hr>  
  58.     4.通过ognl表达式 进行逻辑判断  
  59.         <br>  
  60.         <s:if test="'aa' in {'aaa','bbb'}">  
  61.             aa 在 集合{'aaa','bbb'}中;  
  62.         </s:if>  
  63.         <s:else>  
  64.             aa 不在 集合{'aaa','bbb'}中;  
  65.         </s:else>  
  66.   
  67.         <br />  
  68.   
  69.         <s:if test="#request.req not in #list">  
  70.             不 在 集合list中;  
  71.         </s:if>  
  72.         <s:else>  
  73.             在 集合list中;  
  74.         </s:else>  
  75.         <br />  
  76.         <hr>  
  77.     5.通过ognl表达式 的投影功能进行数据筛选  
  78.         <br>  
  79.         <s:set name="list1" value="{1,2,3,4,5}"></s:set>  
  80.         <s:iterator value="#list1.{?#this>2}" var="o">  
  81.             <!-- #list.{?#this>2}:在list1集合迭代的时候,从中筛选出当前迭代对象>2的集合进行显示 -->  
  82.             ${o }<br />  
  83.         </s:iterator>  
  84.         <br />  
  85.         <hr>  
  86.     5.通过ognl表达式 访问某个类的静态方法和值  
  87.         <br>  
  88.         <s:property value="@java.lang.Math@floor(32.56)" />  
  89.   
  90.         <s:property value="@com.rao.struts2.action.OGNL1Action@aa" />  
  91.         <br />  
  92.         <br />  
  93.         <hr>  
  94.     6.ognl表达式 迭代标签 详细  
  95.         <br>  
  96.         <s:set name="list2"  
  97.             value="{'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj'}"></s:set>  
  98.         <table border="1">  
  99.             <tr>  
  100.                 <td>  
  101.                     索引  
  102.                 </td>  
  103.                 <td>  
  104.                     值  
  105.                 </td>  
  106.                 <td>  
  107.                     奇?  
  108.                 </td>  
  109.                 <td>  
  110.                     偶?  
  111.                 </td>  
  112.                 <td>  
  113.                     首?  
  114.                 </td>  
  115.                 <td>  
  116.                     尾?  
  117.                 </td>  
  118.                 <td>  
  119.                     当前迭代数量  
  120.                 </td>  
  121.             </tr>  
  122.             <s:iterator value="#list2" var="o" status="s">  
  123.                 <tr bgcolor="<s:if test="#s.even">pink</s:if>">  
  124.                     <td>  
  125.                         <s:property value="#s.getIndex()" />  
  126.                     </td>  
  127.                     <td>  
  128.                         <s:property />  
  129.                     </td>  
  130.                     <td>  
  131.                         <s:if test="#s.odd">Y</s:if>  
  132.                         <s:else>N</s:else>  
  133.                     </td>  
  134.                     <td>  
  135.                         <s:if test="#s.even">Y</s:if>  
  136.                         <s:else>N</s:else>  
  137.                     </td>  
  138.                     <td>  
  139.                         <s:if test="#s.first">Y</s:if>  
  140.                         <s:else>N</s:else>  
  141.                     </td>  
  142.                     <td>  
  143.                         <s:if test="#s.isLast()">Y</s:if>  
  144.                         <s:else>N</s:else>  
  145.                     </td>  
  146.                     <td>  
  147.                     <s:property value="#s.getCount()"/>  
  148.                 </td>  
  149.                 </tr>  
  150.   
  151.             </s:iterator>  
  152.         </table>  
  153.         <br>  
  154.         <hr>  
  155.     7.ognl表达式:  if/else if/else 详细<br>  
  156.         <% request.setAttribute("aa",0); %>  
  157.         <s:if test="#request.aa>=0 && #request.aa<=4">  
  158.             在0-4之间;  
  159.         </s:if>  
  160.         <s:elseif test="#request.aa>=4 && #request.aa<=8">  
  161.             在4-8之间;  
  162.         </s:elseif>  
  163.         <s:else>  
  164.             大于8;  
  165.         </s:else>  
  166.         <br>  
  167.         <hr>  
  168.     8.ognl表达式: url 详细<br>  
  169.         <% request.setAttribute("aa","sss"); %>  
  170.         <s:url action="testAction" namespace="/aa/bb">  
  171.             <s:param name="aa" value="#request.aa"></s:param>  
  172.             <s:param name="id">100</s:param>  
  173.         </s:url>  
  174.         <br/>  
  175.         <s:set name="myurl" value="'http://www.baidu.com'"></s:set>  
  176.         value以字符处理:   <s:url value="#myurl"></s:url><br>  
  177.         value明确指定以ognl表达式处理:    <s:url value="%{#myurl}"></s:url>  
  178.         <br>  
  179.         <hr>  
  180.     9.ognl表达式: checkboxlist 详细<br>  
  181.         1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>  
  182.         name:checkboxlist的名字<br>  
  183.         list:checkboxlist要显示的列表<br>  
  184.         value:checkboxlist默认被选中的选项,checked=checked<br>  
  185.         <s:checkboxlist name="checkbox1" list="{'上网','看书','爬山','游泳','唱歌'}" value="{'上网','看书'}" ></s:checkboxlist>  
  186.         <br>  
  187.         以上生成代码:<br>  
  188.         <xmp>  
  189.             <input type="checkbox" name="checkbox1" value="上网" id="checkbox1-1" checked="checked"/>  
  190.             <label for="checkbox1-1" class="checkboxLabel">上网</label>  
  191.             <input type="checkbox" name="checkbox1" value="看书" id="checkbox1-2" checked="checked"/>  
  192.             <label for="checkbox1-2" class="checkboxLabel">看书</label>  
  193.             <input type="checkbox" name="checkbox1" value="爬山" id="checkbox1-3"/>  
  194.             <label for="checkbox1-3" class="checkboxLabel">爬山</label>  
  195.             <input type="checkbox" name="checkbox1" value="游泳" id="checkbox1-4"/>  
  196.             <label for="checkbox1-4" class="checkboxLabel">游泳</label>  
  197.             <input type="checkbox" name="checkbox1" value="唱歌" id="checkbox1-5"/>  
  198.             <label for="checkbox1-5" class="checkboxLabel">唱歌</label>"  
  199.         </xmp>  
  200.         2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>  
  201.         name:checkboxlist的名字<br>  
  202.         list:checkboxlist要显示的列表<br>  
  203.         listKey:checkbox 的value的值<br>  
  204.         listValue:checkbox 的lablel(显示的值)<br>  
  205.         value:checkboxlist默认被选中的选项,checked=checked<br>  
  206.         <s:checkboxlist name="checkbox2" list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>  
  207.         <br>  
  208.         以上生成代码:<br>  
  209.         <xmp>  
  210.             <input type="checkbox" name="checkbox2" value="1" id="checkbox2-1" checked="checked"/>  
  211.             <label for="checkbox2-1" class="checkboxLabel">上网</label>  
  212.             <input type="checkbox" name="checkbox2" value="2" id="checkbox2-2" checked="checked"/>  
  213.             <label for="checkbox2-2" class="checkboxLabel">看书</label>  
  214.             <input type="checkbox" name="checkbox2" value="3" id="checkbox2-3"/>  
  215.             <label for="checkbox2-3" class="checkboxLabel">爬山</label>  
  216.             <input type="checkbox" name="checkbox2" value="4" id="checkbox2-4"/>  
  217.             <label for="checkbox2-4" class="checkboxLabel">游泳</label>  
  218.             <input type="checkbox" name="checkbox2" value="5" id="checkbox2-5" checked="checked"/>  
  219.             <label for="checkbox2-5" class="checkboxLabel">唱歌</label>  
  220.         </xmp>  
  221.         <hr>  
  222.     10.ognl表达式: s:radio 详细<br>  
  223.         <%  
  224.             Sex sex1 = new Sex(1,"男");   
  225.             Sex sex2 = new Sex(2,"女");  
  226.             List<Sex> list = new ArrayList<Sex>();   
  227.             list.add(sex1);  
  228.             list.add(sex2);  
  229.             request.setAttribute("sexs",list);   
  230.         %>  
  231.         这个与checkboxlist差不多;<br>  
  232.         1>.如果集合为javabean:<s:radio name="sex" list="#request.sexs" listKey="id" listValue="name"></s:radio><br>  
  233.         2>.如果集合为list:<s:radio name="sexList" list="{'男','女'}"></s:radio><br>  
  234.         3>.如果集合为map:<s:radio name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:radio><br>  
  235.         <hr>  
  236.     11.ognl表达式: s:select 详细<br>  
  237.         这个与s:checkboxlist差不多;<br>  
  238.         1>.如果集合为javabean:<s:select name="sex" list="#request.sexs" listKey="id" listValue="name"></s:select><br>  
  239.         2>.如果集合为list:<s:select name="sexList" list="{'男','女'}"></s:select><br>  
  240.         3>.如果集合为map:<s:select name="sexMap" list="#{1:'男',2:'女'}" listKey="key" listValue="value"></s:select><br>  
  241.     到此主要的ognl</span>标签已经介绍完毕...由于表单标签相对简单不介绍了....  
  242.     </body>  
  243. </html>  

 

附上以上代码运行结果图片:见附件

 



 

 

 

 

 


总结OGNL的使用方法:

访问属性

名字属性获取:<s:property value="user.username"/><br>

地址属性获取:<s:property value="user.address.addr"/><br>

访问方法

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

访问静态属性和方法

调用Action中的静态方法:<s:property value="@struts.action.LoginAction@get()"/>

调用JDK中的类的静态方法:<s:property value="@java.lang.Math@floor(44.56)"/><br>

调用JDK中的类的静态方法(同上):<s:property value="@@floor(44.56)"/><br>

调用JDK中的类的静态方法:<s:property value="@java.util.Calendar@getInstance()"/><br>

调用普通类中的静态属性:<s:property value="@struts.vo.Address@TIPS"/><br>

访问构造方法

调用普通类的构造方法:<s:property value="new struts.vo.Student('李晓红' , '美女' , 3 , 25).username"/>

 

1.5. 访问数组

获取List:<s:property value="testList"/><br>

获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testList[0]"/><br>

获取Set:<s:property value="testSet"/><br>

获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据):

<s:property value="testSet[0]"/><br> ×

获取Map:<s:property value="testMap"/><br>

获取Map中所有的键:<s:property value="testMap.keys"/><br>

获取Map中所有的值:<s:property value="testMap.values"/><br>

获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testMap['m1']"/><br>

获取List的大小:<s:property value="testSet.size"/><br>

 

访问集合 – 投影、选择(? ^ $)

利用选择获取List中成绩及格的对象:<s:property value="stus.{?#this.grade>=60}"/><br>

利用选择获取List中成绩及格的对象的username:

<s:property value="stus.{?#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的第一个对象的username:

<s:property value="stus.{?#this.grade>=60}.{username}[0]"/><br>

利用选择获取List中成绩及格的第一个对象的username:

<s:property value="stus.{^#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的最后一个对象的username:

<s:property value="stus.{$#this.grade>=60}.{username}"/><br>

利用选择获取List中成绩及格的第一个对象然后求大小:

<s:property value="stus.{^#this.grade>=600}.{username}.size"/><br>

集合的伪属性

OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.

集合

伪属性

Collection(inherited by Map, List & Set)

size ,isEmpty

List

iterator

Map

keys , values

Set

iterator

Iterator

next , hasNext

Enumeration

next , hasNext , nextElement , hasMoreElements

 

 Lambda   :[…]

格式::[…]

使用Lambda表达式计算阶乘:

<s:property value="#f = :[#this==1?1:#this*#f(#this-1)] , #f(4)"/><br>

OGNL中#的使用

#可以取出堆栈上下文中的存放的对象.

名称

作用

例子

parameters

包含当前HTTP请求参数的Map

#parameters.id[0]作用相当于

request.getParameter("id")

request

包含当前HttpServletRequest的属性(attribute)的Map

#request.userName相当于

request.getAttribute("userName")

session

包含当前HttpSession的属性(attribute)的Map

#session.userName相当于

session.getAttribute("userName")

application

包含当前应用的ServletContext的属性(attribute)的Map

#application.userName相当于

application.getAttribute("userName")

attr

用于按request > session > application顺序访问其属性(attribute)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

获取Paraments对象的属性:<s:property value="#parameters.username"/>

OGNL中%的使用

用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.

例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.

 OGNL中$的使用

“$”有两个主要的用途

l         用于在国际化资源文件中,引用OGNL表达式

l         在Struts 2配置文件中,引用OGNL表达式

 值栈

ValueStack对象。这个对象贯穿整个Action的生命周期(每个Action类的对象实例会拥有一个ValueStack对象)。当Struts 2接收到一个.action的请求后,会先建立Action类的对象实例,但并不会调用Action方法,而是先将Action类的相应属性放到ValueStack对象的顶层节点(ValueStack对象相当于一个栈)。

在Action中获得ValueStack对象:ActionContext.getContext().getValueStack()

l         Top语法

使用Top获取值栈中的第二个对象:<s:property value="[1].top.对象"/>

l         N语法

使用N获取值栈中的第二个对象:<s:property value="[1].对象"/>

l         @语法

调用action中的静态方法:<s:property value="@vs1@静态方法"/> vs:值栈 1:表示第一个。

分享到:
评论

相关推荐

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    OGNL表达式详解

    使用Struts2时,利用ognl表达式在页面获取后台参数值

    Struts2 OGNL表达式实例详解

    主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。

    ognl表达式详解

    应用于Java中的一个开源的表达式语言,它被集成在Struts2等框架中,作用是对数据进行访问,它拥有类型转换、访问对象方法、操作集合对象等功能。

    Struts2+Spring+Hibernate3.2+整合文档及事例程序.zip

    properties文件即i18n国际化多国语言版的用法,struts2前台校验,对输入的数据进行验证validators struts2 OGNL 表达式详解 struts2 #,*,%

    Struts2详解,Struts2与Struts1的区别

    新手必备,看完绝对思路清晰。醍醐灌顶啊! 一. Struts2介绍 1. Struts2简介 2. Struts2和Struts1的常见区别 ...二. Struts2入门 ... 3. 快速配置Struts2环境 ... OGNL表达式 五. Struts2中常用标签

    struts2 详解文档

    介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示...ognl表达式 Struts 2常用标签解说 使用标签防止表单重复提交 Struts 2+Spring 2.5+Hibernate 3.3整合开发

    struts2所需jar包,ppt讲解全部配置,代码示例,包括hibernate

    全部配置ppt讲解,ognl表达式使用,hibernate框架详解,以及示例代码,所需jar包。。。。

    Struts2中ognl遍历数组,list和map方法详解

    主要介绍了Struts2中ognl遍历数组,list和map方法详解,需要的朋友可以参考下。

    低清版 大型门户网站是这样炼成的.pdf

    2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件...

    Java Web程序设计教程

    5.4值栈与ognl表达式 100 5.5struts2的标签库 103 5.5.1控制标签 103 5.5.2数据标签 104 5.5.3表单标签 105 5.5.4非表单ui标签 107 本章小结 108 课后练习 109 第6章struts2高级应用 110 6.1拦截器 110 ...

    java从入门到精通70个PPT

    33 Struts 2配置详解 34 Struts 2深入 拦截器 35 Struts 2综合应用 36 类型转换和OGNL 37-40 项目案例:在线投票系统 41 jsp servlet struts总结 42 Hibernate 入门 43 Hibernate 关联映射 44 HQL实用技术 45 HQL...

Global site tag (gtag.js) - Google Analytics