OGNL符号详解:$%,#在Struts2中的区别与用法

需积分: 10 0 下载量 8 浏览量 更新于2024-09-10 收藏 19KB DOCX 举报
OGNL符号在Struts2框架中的运用是开发者们常常遇到的一个主题,特别是在编写动态网页时。OGNL,全称Object-Graph Navigation Language,是一种强大的表达式语言,它允许开发者通过简单的语法操作对象的属性、方法和上下文,提供了高度的灵活性和便利性。以下是关于$、%和#这三个特殊符号在Struts2标签中的具体使用。 首先,我们来了解一下OGNL的特点: 1. 对象操作:OGNL支持对对象实例的方法调用,比如`objName.methodName()`,这使得代码更具可读性和灵活性。 2. 静态方法调用:表达式如`@[类全名]@[方法名|值名]`用于访问类的静态方法或属性,如`@java.lang.String@format('foo%s','bar')`。 3. 赋值与运算:OGNL支持简单的赋值和表达式串联,如`price=100,discount=0.8,calculatePrice()`。 4. 上下文管理:可以访问OGNL上下文和ActionContext,这些上下文提供了与当前请求相关的数据存储。 5. 处理集合:OGNL能够有效地处理集合类型的数据,如遍历和操作列表或数组。 接下来,我们重点讲解`%`、`#`和`$`在Struts2中的区别: - $符号:在Struts2中,虽然$通常用于EL (Expression Language)中,但在OGNL表达式中,它通常不作为主要的访问符。然而,如果在OGNL中使用$,它会被解析为EL,所以在某些情况下可能会被误用。 - #符号:#在OGNL中具有特殊的含义,用于访问Struts2中的值栈。它相当于`ActionContext.getContext()`,允许开发者访问ActionContext中的各种属性。以下是几个关键的`#`引用: - `#parameters`:获取当前HTTP请求的参数Map,如`#parameters.id[0]`等同于`request.getParameter("id")`。 - `#request`:访问HttpServletRequest的属性Map,如`#request.userName`等同于`request.getAttribute("userName")`。 - `#session`:获取HttpSession的属性Map,如`#session.userName`等同于`session.getAttribute("userName")`。 - `#application`:访问ServletContext的属性Map,如`#application.userName`等同于`application.getAttribute("userName")`。 - %符号:在Struts2中,%符号通常用于字符串格式化,而不是OGNL表达式。然而,在特定的场景下,比如在<s:text>标签中,%可以用于引用bean属性或表达式结果,但它的行为可能与OGNL的使用略有不同。 OGNL符号在Struts2中主要用于提供动态访问上下文和对象属性的能力,而$符号的使用相对较少,更多的是与EL混淆。了解并熟练掌握#符号的用法,可以帮助开发者更有效地利用Struts2的动态特性,提高代码的可维护性和效率。