У тега forEach возникла проблема

Привет всем Я столкнулся с проблемой при использовании forEach для итерации, я даю полный код, пожалуйста, скажите мне, что не так с этим.

index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  pageEncoding="ISO-8859-1"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
  <title>Insert title here</title>  
</head>  
<body>  
  <form method="get" action="go">  
  <center><input type="SUBMIT"></center>  
</body>  
</html>  

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  
  <display-name>FirstJsp</display-name>  
  <context-param>  
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>  
    <param-value>client</param-value>  
    <!--  
      <description>  
        State saving method: "client" or "server" (= default)  
        See JSF Specification 2.5.2  
      </description>  
    -->  
  </context-param>  
  <listener>  
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class>  
  </listener>  
  <servlet>  
    <servlet-name>faces</servlet-name>  
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>  
    <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>faces</servlet-name>  
    <url-pattern>*.jsf</url-pattern>  
  </servlet-mapping>  
  <servlet-mapping>  
    <servlet-name>faces</servlet-name>  
    <url-pattern>*.faces</url-pattern>  
  </servlet-mapping>  

   <servlet>  
    <description></description>  
    <display-name>foreachservlet</display-name>  
    <servlet-name>foreachservlet</servlet-name>  
    <servlet-class>com.foreach.foreachservlet</servlet-class>  
  </servlet>  
  <servlet-mapping>  
    <servlet-name>foreachservlet</servlet-name>  
    <url-pattern>/go</url-pattern>  
  </servlet-mapping>  

  <welcome-file-list>  
    <welcome-file>index.html</welcome-file>  
    <welcome-file>index.htm</welcome-file>  
    <welcome-file>index.jsp</welcome-file>  
    <welcome-file>default.html</welcome-file>  
    <welcome-file>default.htm</welcome-file>  
    <welcome-file>default.jsp</welcome-file>  
  </welcome-file-list>  
  <context-param>  
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>  
    <param-value>resources.application</param-value>  
  </context-param>  
</web-app>

Код сервлета:

package com.foreach;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class foreachservlet
 */
public class foreachservlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public foreachservlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        try{
            System.out.println("Getting inside get method--");
            String[] movieList={"Isquia","3 idiots","Kurbaan","Jab we met"};
            request.setAttribute("movieList",movieList);

            System.out.println("After setting attribute");
            RequestDispatcher dispatcher=request.getRequestDispatcher("/pages/welcome.jsp");
            dispatcher.forward(request, response);

                System.out.println("Last line--");

        }catch(Exception e){
            e.printStackTrace();
        }


    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

JSP код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<HTML>
<HEAD><TITLE>Movie Collections</TITLE>
</HEAD>
<BODY>
  <strong>Movie list</strong><br></br>
  <TABLE BORDER=5 ALIGN="CENTER">
    <c:forEach var="movie" items="${movieList}">
      <tr>
         <td>${movie}</td>
      </tr>
    </c:forEach>
  </TABLE>
</BODY></HTML>

Я получаю следующую ошибку, которую не могу понять.

welcome.jsp:9:24: Static attribute must be a String literal, its illegal to specify an expression.
<c:forEach var="movie" items="${movieList}">
                       ^---^
welcome.jsp:9:24: Static attribute must be a String literal, its illegal to specify an expression.
<c:forEach var="movie" items="${movieList}">
                       ^---^

Пожалуйста помоги. Спасибо

3 ответа

Я думаю, это потому, что URI в вашем объявлении taglib неверен. Так должно быть

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

вместо

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

Тот, который вы используете, предназначен для старой библиотеки, предшествующей JSP-2.0, которая не поддерживала выражения времени выполнения (выражение передавалось как необработанная строка и оценивалось самим тегом, а не механизмом JSP).

редактировать: похоже, это та же проблема, что у вас была с языком выражений в JSP не работает

Пожалуйста, включите эту строку:

 <%@ taglib uri='http://java.sun.com/**jsp**/jstl/core' prefix='c'%>

Вместо:

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

На самом деле JSTL - это просто набор пользовательских тегов и не может использоваться отдельно. Если вы не используете какой-либо MVC-фреймворк, вам нужно сделать некоторые изменения самостоятельно. Если вы используете Spring MVC, включите jstl как:

<%@taglib prefix="c" uri="http://java.sun.com/jstl/**core_rt**"%>

Если вы не используете core_rt, это приведет к ошибке.

Ты можешь попробовать:

<c:forEach items="${movieList}" varStatus="i">
     <td>${movieList[i.index]}</td>
</c:forEach>
Другие вопросы по тегам