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

html如何使用ognl

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中的属性或值栈中的数据。

html如何使用ognl  第1张

<%@ 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:
0