forEach标签有问题

时间:2010-02-07 12:53:30

标签: 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>  

的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>

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
    }

}

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 个答案:

答案 0 :(得分:14)

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

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

而不是

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

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

修改:看起来与Expression Language in JSP not working

的问题相同

答案 1 :(得分:1)

请包含以下这一行:

 <%@ 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 ,则会抛出错误。

答案 2 :(得分:0)

您可以尝试:

<c:forEach items="${movieList}" varStatus="i">
     <td>${movieList[i.index]}</td>
</c:forEach>