标签及表达式如
#request.value或
#session.value`从Action、请求或会话中获取数据并展示NL(Object-Graph Navigation Language)是一种表达式语言,常用于Java Web应用程序中,特别是在Struts2框架中,它允许开发者在HTML页面中动态地访问和操作Java对象的属性和方法,以下是如何在HTML中使用OGNL的详细指南:
OGNL基础概念
概念 | 描述 |
---|---|
OGNL表达式 | 用于访问值栈中的对象及其属性,语法类似于${object.property} 或#{object.property} 。 |
值栈(Value Stack) | Struts2框架中的一个核心概念,包含Action上下文、请求参数、会话属性等,OGNL表达式通常从值栈中取值。 |
#符号 | 用于访问OGNL上下文中的特定范围,如#request 、#session 、#application 等。 |
OGNL在HTML中的使用场景
在JSP页面中使用OGNL
在JSP页面中,可以通过OGNL表达式直接访问Action中的属性或值栈中的数据。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8">OGNL示例</title> </head> <body> <!-直接输出Action中的属性 --> <s:property value="username"/> <!-遍历集合 --> <s:iterator value="users" var="user"> <p>${user.name} ${user.email}</p> </s:iterator> <!-访问请求属性 --> <s:property value="#request.reqName"/> </body> </html>
在Struts2标签中使用OGNL
在Struts2标签中,可以直接使用OGNL表达式作为属性值。
<s:textfield name="username" value="%{#request.reqName}"/>
OGNL表达式的高级用法
表达式 | 描述 |
---|---|
${object.property} |
直接访问对象的属性。 |
#{object.property} |
用于构造新的表达式或Map。 |
#request.attribute |
访问请求范围内的属性。 |
#session.attribute |
访问会话范围内的属性。 |
#application.attribute |
访问应用范围内的属性。 |
books.{?#this.price<100} |
过滤集合,返回价格小于100的书籍。 |
#{'foo1':'bar1','foo2':'bar2'} |
构造一个Map。 |
OGNL与EL的区别
特性 | OGNL | EL |
---|---|---|
主要用途 | 访问值栈中的对象,常用于Struts2框架。 | 访问请求范围内的属性,常用于JSP页面。 |
语法 | ${object.property} 或#{object.property} |
${object.property} |
适用范围 | 可以访问Action上下文、请求、会话、应用范围等。 | 主要访问请求范围。 |
功能 | 支持复杂的对象图导航和集合操作。 | 功能相对简单,主要用于基本数据访问。 |
常见问题与解决方案
如何在普通HTML标签中使用OGNL?
在普通的HTML标签中,不能直接使用OGNL表达式,必须通过Struts2标签或其他支持OGNL的标签来使用。
<!-错误用法 --> <a href="${url}">链接</a> <!-正确用法 --> <s:url var="linkUrl" value="%{url}"/> <a href="%{linkUrl}">链接</a>
如何在表单中初始化OGNL表达式的值?
在Struts2的表单标签中,可以使用value
属性并加上来强制解析OGNL表达式。
<s:textfield name="username" value="%{#request.reqName}"/>
FAQs
问:OGNL表达式中的符号有什么作用?
答:符号用于访问OGNL上下文中的特定范围,如#request
表示请求范围,#session
表示会话范围,#application
表示应用范围,它还可以用来构造Map或过滤集合。
问:如何在JSP页面中遍历一个List或Map?
答:可以使用Struts2的<s:iterator>
标签来遍历集合,对于List,可以直接使用;对于Map,可以使用entry
键来访问键值对。
<!-遍历List --> <s:iterator value="users" var="user"> <p>${user.name} ${user.email}</p> </s:iterator> <!-遍历Map --> <s:iterator value="userInfo" var="entry"> <p>${entry.key} ${entry.value}</p> </s:
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/60502.html