概述
Ognl表达式语言
概述
l OGNL表达式
OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。
l OGNL优势
1、支持对象方法调用,如xxx.doSomeSpecial();
2、支持类静态的方法调用和值访问,表达式的格式:
@[类全名(包括包路径)]@[方法名| 值名],例如:
@java.lang.String@format('foo %s', 'bar')
或@tutorial.MyConstant@APP_NAME;
3、支持赋值操作和表达式串联,如price=100, discount=0.8,
calculatePrice(),这个表达式会返回80;
4、访问OGNL上下文(OGNL context)和ActionContext;
5、操作集合对象。
l 总结
OGNL 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了 java.utils.Map 的接口。 OgnlContext对象
分析:
ü Struts框架默认就支持Ognl表达式语言。
(struts必须引用的包:ognl.jar)
ü 作用
页面取值用。
El表达式语言,用于页面取值,jsp页面取值的标准。(默认直接可以使用)
(应用范围更广。)
Ognl表达式语言, struts标签默认支持的表达式语言。
必须配置struts标签用,不能离开struts标签直接用。
OGNL表达式之#号
#号的作用
#号主要用于访问访问Map栈信息,不使用#号主要用于访问List(对象栈)信息。
举例
<s:property value="#request.username"/>
<s:property value="#request.userpsw"/>
<s:property value="address"/> // 获取对象栈信息(默认从栈顶检索)
Struts2的property 标签中value属性值会特意的将其中的值以OGNL表达式的方式进行运行。
OGNL表达式之对象栈检索顺序
对象栈中添加对象
1、给Action添加name和psw属性
2、创建一个User指定name和psw属性
3、创建一个Student指定name和psw属性
分别将User和Studen存储到对象栈中
分析
name = <s:property value="name"/>
psw = <s:property value="psw"/>
一定是从栈顶开始查询,一旦找到就显示。没有找到依次遍历对象栈的所有属性。
OgnlValueStack类里有一个List类型的root变量,存放了一组对象,处于第一位的对象叫栈顶对象。(list集合的 索引为0为栈顶)。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象的属性,索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。
OGNL表达式之$号
$号的作用
在国际化资源文件中,引用OGNL表达式
在Struts2配置文件中,引用OGNL表达式
举例
ognl.xml配置文件
<action name="ognlAction_*" class="cn.itcast.ognl.OgnlAction" method="{1}">
<result name="success">/ognl/ognl.jsp?username=${#request.username}</result>
</action>
在ognl.jsp中获取携带的参数:
<s:property value="%{#parameters.username[0]}"/>
OGNL表达式之%号
%号的作用
“%”符号的作用是在当Struts2标签的属性值为OGNL表达式时OGNL表达式却被理解为字符串类型原样输出时,用于通知执行环境%{}里的是OGNL表达式。
举例
Struts2中的textfield标签主要用于在页面中显示一个文本输入框数据。类似input
<s:textfield value="#request.username"></s:textfield>
此时#request.username被理解为一个普通的字符串,因此直接显示。因为这里脱离了
运行OGNL的环境即:<s:property value="OGNL表达式"/>环境。
通知运行环境将#request.username以OGNL表达式运行:
<s:textfield value="%{#request.username}"></s:textfield>
总结
为了方便使用%{}我们可以在任何地方都直接添加%{}来确保运行OGNL表达式:
<s:property value="%{#request.username}"/>
最后
以上就是甜蜜月光为你收集整理的struts中的ognl表达式 Ognl表达式语言的全部内容,希望文章能够帮你解决struts中的ognl表达式 Ognl表达式语言所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复