TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
  
OGNL全称为Object-Graph Navigation Language,是一种操作对象属性的开源的表达式语言。相对于其它的表达式语言如EL等,OGNL的优点: 
1,能够访问对象的方法,例如:list.size(); 
2,能够访问静态属性与静态方法,方法是在类名前,方法前加上@如:[email=java.lang.Math@PI,@javalang.String@format(%27f00%s%27]java.lang.Math@PI,@javalang.String@format('f00 %s'[/email],'bar'); 
3,支持赋值操作和表达式串联;如赋值#value=5; 
4,访问OGNL上下文(OGNL context)和ActionContext(所有的Servlet资源); 
5,操作集合类对象 
OGNL主要有3个符号:#,%与$ 
一,"#"声明OGNL表达式的用途 
1,能够访问OGNL上下文与ActionContext资源,相当于ActionContext.getContext()。常用的"#"属性如下: 
属性                             作用                                                            示例 
#parameters           代表request提交的所有参数           #parameters.id返回的是String[]类型,相当于JSP中的request.get                                                                                            ParametersValues("id")。一般使用#parameters.id[0] 
#request                  代表request里的所有属性               #request.account相当于JSP中的request.attribute("account") 
#session                 代表session里的所有属性               #session.account相当于JSP中的session.getAttribute("account") 
#application           代表ServletContext里的所有属性    #application.account相当于JSP中的application.getAttribute("account") 
#attr                         代表request或session或application #attr.accout相当于EL表达式中的${account},依次查属性account 
                                的所有属性 
2,用于过滤或筛选集合,例如:books.{?#this.price<20},表示所有的price<20的书; 
3,构造Map,如#{'foo1':'bar1','foo2':'bar2'}; 
二,“%”显示声明OGNL表达式 
%用于表示某字符串为一个OGNL表达式。某些标签中既能接受字符串,又能接受OGNL表达式。这时候,标有%的被当做OGNL表达式并被执行,没有标有%的被当做普通的字符串,例如: 
<struts:label label="#request.account"></struts:label>  <!--参数为普通字符串--> 
<struts:label label="%{#request.account}"></struts:label> <!--用%表示参数为OGNL--> 
三,“$ ”在资源文件中引用OGNL表达式 
$主要用于在资源国际化文件中或者struts.xml中引用OGNL表达式,例如: 
Resouses.properties 
validation.require = ${getText(fileName)} is required 
struts.xml 
<action name="AddPhoto" class="addPhoto"> 
  <result type="redirect'>ListPhoto.action?albumId=${albumId}</result> 
</action> 
  
  
 |   
 
 
 
 |