Struts2标签Ognl精讲

Struts2扩展自WebWork,为简化界面编程Struts2沿用WebWork标签的风格,以OGNL为标签属性值进行动态存取,大大增强Struts2标签的功能及易用性。

 

那OGNL到底为何物件呢?

 

1.OGNL(Object Graph Navigation Language)即对象图形导航语言。该语言并非计算机编程语言,只是对对象

 

  的值进行运算的(或对对象变量进行进行赋值运算的)表达式中的一种。是对λ(Lampda)表达式语言的扩展。功

 

  效与原sun公司的JSTL的EL表达式一样,但更强大。

 

2.OGNL的语法特点:

 

  1)、OGNL操作的都是对象,是为对象赋值的一种表达式。

 

  2)、OGNL的作用域离不开Struts2的Stack Context,Stack Context又分为:Value Stack、Application、

 

     Request、Session、Parameters、Atrr子域,其中OGNL都是以Value Stack域的对象为表达式操作的根对

 

     象,且OGNL对自己的根对象的访问直接访问就行,对其它作用域对象的访问都必须使用"英镑"符号作为对

 

     象引用的前缀,如:obj(表示Value Stack域的对象obj),#application.obj(表示Application域的对象

 

     obj),#request.obj,#session.obj,#request.parameter.obj(HttpReqest.getParameter("obj")),而

 

     #attr.obj是依次从page>request>session>application遍历寻找obj对象,找不到返回null。OGNL以Map

 

     的格式来存储操作结果,其中对象的变量名映射Map的"key",对象的变量值映射Map的"value",由出可以

 

     推断出在每个子域中OGNL对对象的操作可以是多个而不仅仅是单个。

 

  3)、OGNL的运算符

 

     "#":非根对象引用的前缀。

 

     ".":对象引用链式指针。

 

     "[]":属性索引标识符。

 

     "^":查询以某标识符开头的对象。

 

     "$":查询以某标识符结尾的对象。

 

     "?":匹配某个标识符的一个或多个对象。

 

      "%":扩展自WebWork的表达式标识符,多与一对"{"、"}"一起使用,"{"、"}"中可以有0个或多个对象,

 

          没内容表示""字符串,一个表示单个对象,多个以","分隔,表示List、Set或String[]数组。而"%#

 

          {'':'','':''}"是Map的表现形式。"%{abc}"表示abc对象的引用,"%{'abc'}"表明abc是字符

 

          串"abc"本身。

 

3.OGNL的使用示例

 

  如何分辨栈顶、非栈顶元素

 

  1)、Struts2应用程序中凡ActionContext.getContext().put("obj",obj);的操作,obj都是栈顶元素。其它操

 

     作obj都是非栈顶元素。

 

  2)、JSP页面中,当前PC计数器指针指向的执行单元都是栈顶的执行元素。

 

    <body>

      <s:bean name="cn.yogreen.action.Name"var="nameBean"><!--对应应用程序的JavaBean-->

          <s:paramname="firstName" value="'LEE'"/>

          <s:param name="lastName">Yogreen</s:param>

          <!--访问同个执行单元的属性元素-->

          <s:property value="lastName">

      </s:bean>

      

    <s:bean name="cn.yogreen.action.EntityAction" var="entityBean">"<!--对应应用程序的JavaBean-->

         <!--当前执行单元引用到非当前执行单元的对象nameBean-->

         <s:param name="name" value="#nameBean"/>

         <s:param name="age" value="25"/>

    </s:bean>

 

    <!--"%"使用示例"-->

    <s:property value="%{#entityBean.name.firstName}"/><br/>

 

    <!--不使用"%"示例"-->

    <s:property value="#entityBean.name.lastName"/><br/>

    <s:property value="#entityBean.age"/><br />

    <!--当前执行单元引用到非当前执行单元的对象nameBean的属性-->

    <s:property value="#nameBean.firstName"/><br />

    <s:property value="#nameBean.lastName"/><br />

  

   </body>

    依照注解细细品味OGNL的这一特性

 

  3)、所有Struts2标签属性值都是用OGNL表达式来表示的。

 

     

 

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值