当前位置:首页 > 前端开发 > 正文

html如何使用ognl

HTML中使用OGNL,需结合Struts2框架,通过` 标签及表达式如#request.value 或#session.value`从Action、请求或会话中获取数据并展示

NL(Object-Graph Navigation Language)是一种表达式语言,常用于Java Web应用程序中,特别是在Struts2框架中,它允许开发者在HTML页面中动态地访问和操作Java对象的属性和方法,以下是如何在HTML中使用OGNL的详细指南:

html如何使用ognl 第1张

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表达式作为属性值。

html如何使用ognl 第2张

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的标签来使用。

html如何使用ognl 第3张

<!-错误用法 --> <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:

0