上一篇
html如何使用ognl
- 前端开发
- 2025-07-14
- 4542
HTML中使用OGNL,需结合Struts2框架,通过`
标签及表达式如#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:
