如何使用 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 中使用 &lt;% %&gt;)。请参阅***.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 的值的主要内容,如果未能解决你的问题,请参考以下文章

El表达式详解

jsp中常用操作字符串的el表达式

如何使用 JSTL 在 jsp 页面中迭代 ArrayList<HashMap<String, String>>

复习整理1:jsp标准标签库jstl

使用 JSP、Servlet、JSTL 和命令模式显示数据库中的数据

如何在没有 JSTL 的情况下遍历 JSP 上的数组列表