struts2标签理解

Struts 2支持以下几种表达式语言:

1 支持的表达式

OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;

JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;

Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;

Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:
 2 支持的操作 

支持对象方法调用,如xxx.doSomeSpecial();

支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME;

支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;

访问OGNL上下文(OGNL context)和ActionContext;

操作集合对象。

OGNL的用法

3 标签中#、%和$这三个符号的使用 

    #的用途

    

访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
 名称        作用        例子
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)        #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
用于过滤和投影(projecting)集合,如books.{?#this.price<100};

    “%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值

   

如果不用%{} 只用 #user.name.indexOf('wang') >= 0  ,这个的出来的数据是不正确的 
<s:if test="%{#user.name.indexOf('wang') >= 0 }">
	 姓王
 </s:if>

   

  “$”有两个主要的用途

 用于在国际化资源文件中,引用OGNL表达式,例子请参考《在Struts 2.0中国际化(i18n)您的应用程序》
 在Struts 2配置文件中,引用OGNL表达式,如
 <action name="AddPhoto" class="addPhoto">
            <interceptor-ref name="fileUploadStack" />            
            <result type="redirect">ListPhotos.action?albumId=${albumId}</result>
 </action>

猜你喜欢

转载自username2.iteye.com/blog/2004544