1, OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。
2,Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>。
3,OGNL中重要的3个符号:#、%、$:
4,OGNL 要结合 Struts 标签来使用。由于比较灵活,也容易把人弄晕,尤其是“%”、“#”、“$”这三个符号的使用。
5,#符号
(1)访问非根对象的属性,如 ActionContext 上下文,由于 Struts 2 中值栈被视为根对象,所以访问其他非根对象时,需要加“#”前缀。
例如#session.msg 表达式,实际上,#相当于 ActionContext.getContext();#session.msg表达式相当于 ActionContext.getContext().getSession().getAttribute("msg")
(2) 用来构造 Map,使用过“#”符号构造 Map,
例如“#{‘key1’:‘value1’, ‘key2’:‘value2’, ‘key3’:‘value3’}”,这种方式
6,%符号
“%”符号是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是 OGNL表达式。%符号的用途是在标志的属性为字符串类型时,计算 OGNL 表达式的值,如下面
的代码所示:
7,$符号
(1) 在国际化资源文件中,引用 OGNL 表达式。例如,国际化资源文件中的代码:
reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间
(2) 在 Struts 2 配置文件中,引用 OGNL 表达式,例如下面的配置:
<action name="pageAction" class="com.dream.action.PageAction">
<result name="success">/${pageName}.jsp</result>
</action>
8,OGNL如何融入框架
数据进入,当请求进入框架时,它作为一个HttpServletRequest对象公开给java语言,像我们之前知道的Struts建立在servlet api上,请求参数被作为名、值对存储,名字和值都是string类型。接下来框架开始出来来源这些请求参数的的数据的转移及类型的转换。OGNL自动将数据转移到ValueStack的对象上,我们把user对象作为动作组件javabean属性公开出来,将动作对象放到valuestack上,我们已经准备好让OGNL做导航型的工作。
9,Struts 2 的控制标签
if/else
<s:if test="表达式 1">
标签内容
</s:if>
<s:elseif test="表达式 2">
标签内容
</s:elseif>
<s:else>
标签内容
</s:else>
<s:iterator>标签
<s:iterator value="#session.list" var="name" status="statu"></s:iterator>
<s:property>标签
property 标签的作用就是输出指定值。property 标签输出 value 属性指定的值,如果没有指定 value 属性,则默认输出 ValueStack 栈顶的值。
该标签有如下几个属性。
default:可选属性,如果输出的属性值为null,则显示该值
<s:property value="#parameter.name" default="fairy"/><br/>
<s:set value="#p" name="xxx"/>
set标签 用于将某个值放入指定范围内。例如application、session范围等。
set标签属性:
1.name: 必填,重新生成的新变量的名字
2.scope: 可选,指定新变量被放置的范围,该属性可以接受application、session、request、page或action 5个值。如果没有指定,默认是放置在Stack Context中。
3.value: 可选,指定将赋给变量的值。如果没指定,则将ValueStack栈顶的值赋给新变量。
4.var: 可选,指定该元素的引用ID,如果指定了将会将该值放在ValueStack中!
将Stack Context中的p值放入session范围内<br>
<s:set value="#p" name="xxx" scope="session"/>
<!--使用JSP2.0表达式语言直接访问session中的属性-->
${sessionScope.xxx.name}<br>
取出集合中的值赋给<set标签
<s:iterator id="dmsDocumentinfo" value="#request.dmsDocumentinfos">
//从集合中取值赋给set声明的变量
<s:set name="str" value="#dmsDocumentinfo.documentDesc"></s:set>
//在页面显示set标签的值
<s:property value="#str" />
</s:iterator>
网友评论