Я получаю пустой вывод при использовании c: foreach - PullRequest
1 голос
/ 19 марта 2012

Код на странице jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="GeneralClasses.FooClass" %>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
</head>
<body>
    <c:forEach var="fromArray" items="${array}">
        <p>
            ${fromArray}
        </p>
    </c:forEach>
</body>
</html>

Ниже приведен класс, в котором хранится атрибут array

package GeneralClasses;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class FooClass {
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
    String[] array = {"a","b","java","programming","OS"};
    request.setAttribute("array", array);
  }    
}

Я получаю пустую страницу при запуске файла jsp.Что мне делать, чтобы использовать тег c:foreach?

1 Ответ

1 голос
/ 19 марта 2012

Когда теги JSTL не запускаются, либо у вас вообще не установлен JSTL, либо вы используете древнюю версию JSTL 1.0, которая имеет другой URI тега lib. Самый простой способ проверить, запущен ли JSTL или нет, это открыть страницу в браузере, сделать правый клик и Просмотр источника . Если вы видите, что теги JSTL все еще там, значит, он определенно не запущен.

JSTL по умолчанию входит в состав более полноценных серверов приложений, но не в небольшие и простые сервлет-контейнеры, такие как Tomcat, Jetty и т. Д. Вам нужно было бы поместить необходимые файлы JSTL JAR в папку /WEB-INF/lib веб-приложения или /lib папка сервера самостоятельно.

Для получения более подробной информации, см. Нашу вики-страницу JSTL .

Кстати, ваш сервлет не расширяется HttpServlet и вообще не пересылается в JSP, но я буду считать его небрежным упрощением при подготовке кода для вопроса. Если вы действительно не запрашиваете страницу JSP через сервлет, то причина совершенно иная. Решение простое: вызывайте сервлет по URL, а не по JSP. При необходимости спрячьте JSP в /WEB-INF, чтобы конечный пользователь никогда не мог случайно вызвать его по URL. Смотрите также наша вики страница сервлетов .

Вся эта строка <%@page import="GeneralClasses.FooClass" %> также не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...