forEach标签有问题

use*_*577 2 java jsp jstl

嗨所有我在使用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>  
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Servlet代码:

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
    }

}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,我无法理解.

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}">
                       ^---^
Run Code Online (Sandbox Code Playgroud)

请帮忙.谢谢

ska*_*man 14

我认为这是因为taglib声明中的URI不正确.它应该是

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Run Code Online (Sandbox Code Playgroud)

代替

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
Run Code Online (Sandbox Code Playgroud)

您正在使用的是旧的JSP-2.0之前的库,它不支持运行时表达式(表达式作为原始String传入并由标记本身而不是JSP引擎进行评估).

编辑:看起来这与JSP中的表达式语言无法正常工作相同