9.1什么是OGNL

OGNL 的全称是 Object Graph Navigation Language,即对象导航图语言。它是一个开源项目,工作在视图层,用来取代页面中的 Java 脚本,简化数据的访问操作。

9.2 OGNL使用原则

    存在值栈的数据可以直接取,而存在非值栈的数据就要通过#来获取
    以下案例是通过手工的方式来设置context和root

Root的数据是可以直接访问,而非root的资源需要加“#”

9.3 OGNL+StrutsTag

OGNL 要结合 Struts 标签来使用。由于比较灵活,也容易把人弄晕,尤其是“%”、“#”、“$”这三个符号的使用。

a) ”#” 符号

    (1)访问非根对象的属性,如 ActionContext 上下文,由于 Struts 2 中值栈被视为根对象,所以访问其他非根对象时,需要加“#”前缀。
    例如#session.msg 表达式,实际上,#相当于 ActionContext.getContext();#session.msg表达式相当于 ActionContext.getContext().getSession().getAttribute("msg")
    (2) 用来构造 Map,使用过“#”符号构造 Map,
    例如“#{‘key1’:‘value1’, ‘key2’:‘value2’, ‘key3’:‘value3’}”,这种方式

b) ”%” 符号

    “%”符号是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是 OGNL表达式。%符号的用途是在标志的属性为字符串类型时,计算 OGNL 表达式的值,如下面的代码所示:

c) ”$” 符号

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

9.4 OGNL融入框架