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>
|
|