如何使用 JSTL 显示在 JSP 本身中定义的 ArrayList 的值
Posted
技术标签:
【中文标题】如何使用 JSTL 显示在 JSP 本身中定义的 ArrayList 的值【英文标题】:How to display values of an ArrayList that is defined in the JSP itself, using JSTL 【发布时间】:2013-01-23 06:21:49 【问题描述】:我有一个在 JSP 的 scriptlet 中定义的 ArrayList。在正文部分,我想使用 JSTL forEach 循环显示项目。
通过this one 之类的教程,我编写了以下代码:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.ArrayList" %>
<%
ArrayList<String> fruits = new ArrayList<String>();
fruits.add("Orange");
fruits.add("Apple");
%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<c:forEach var="fruit" items="$fruits">
<c:out value="$fruit" />
</c:forEach>
</body>
</html>
但是我得到一个空白页。我在上面的代码中哪里出错了?
我能找到的所有教程似乎都在 servlet 中定义了一个 ArrayList bean,并通过 request
将它们传递给 JSP。在 forEach 循环中,他们使用c:out
和$bean.prop
来打印它。我没有这样尝试过。我想做一些更简单的事情,但似乎无法让这段代码工作。
【问题讨论】:
找到它们的不是 JSTL。找到它们的是 EL(那些$
的东西)。从***.com/tags/el/info开始
BalusC,感谢您的链接。它清楚地解释了它在哪里寻找对象。
不客气。至于 JSTL,请查看 ***.com/tags/jstl/info(您可以通过悬停标签直到出现黑框并单击其中的 info 链接来找到那些标签 wiki 页面)。至于具体问题,您实际上应该使用预处理 servlet(您应该避免在 JSP 中使用 <% %>
)。请参阅***.com/tags/servlets/info 中的第二个 hello world 示例
【参考方案1】:
添加 pageContext.setAttribute("fruits", fruits);
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page import="java.util.ArrayList" %>
<%
ArrayList<String> fruits = new ArrayList<String>();
fruits.add("Orange");
fruits.add("Apple");
pageContext.setAttribute("fruits", fruits);
%>
<html>
<head>
<title>JSTL</title>
</head>
<body>
<c:forEach var="fruit" items="$fruits">
<c:out value="$fruit" />
</c:forEach>
</body>
</html>
【讨论】:
【参考方案2】:您需要将数组放入请求中。在最后一次 fruits.add() 调用之后立即执行此操作。
<%= request.setAttribute( "fruits", fruits ); %>
【讨论】:
成功了,谢谢!这是否意味着,只有我使用request.setAttribute()
设置的对象才能在 JSTL 标记中使用?我可以通过什么其他方式定义/设置对象,以便它们可用于 JSTL 标记?
page
范围呢?
虽然这项工作有效,但它不适合作为最佳实践。相关:How to avoid Java Code in JSP-Files?
Luiggi,我同意,这不是最佳做法。我试图做的只是回答 OP 的直接问题,而不涉及如何使用许多可用的 Java Web 堆栈之一来实现 Web 应用程序。
保罗,page
范围肯定会起作用。唯一需要注意的是,如果 JSP 执行转发或重定向,则该变量将不可用于后续 JSP。所以这是 OP 在使用 page
作用域之前要理解的一个重要区别。【参考方案3】:
最简单的方法是使用并使用它来定义一个变量。
<c:set var="fruits">
<%= fruits %>
<c:set>
<c:forEach var="fruit" items="$fruits">
<c:out value="$fruit" />
</c:forEach
是您在 scriptlet 中创建的数组列表。
【讨论】:
以上是关于如何使用 JSTL 显示在 JSP 本身中定义的 ArrayList 的值的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JSTL 在 jsp 页面中迭代 ArrayList<HashMap<String, String>>