2010-02-07 58 views
2

嗨我所面临的问题,同时使用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> 

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}"> 
         ^---^ 

请帮忙。谢谢

回答

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库,它不支持运行时表达式(表达中传递作为原始字符串并由标签本身评估,而不是JSP引擎)。

编辑:看起来它是你与Expression Language in JSP not working

+1

在另一个问题中,他最初在模板文本中遇到了EL问题。 – BalusC 2010-02-07 13:24:18

+0

非常感谢先生。问题仅在于标签库。 – user262577 2010-02-07 14:08:25

+0

很高兴帮助你。请不要忘记标记他的答案**接受**通过点击左边的大白色复选标记:)这就是它应该如何在这里工作在Stackoverflow:http://stackoverflow.com/faq – BalusC 2010-02-08 02:33:31

0

同样的问题,你可以试试:

<c:forEach items="${movieList}" varStatus="i"> 
    <td>${movieList[i.index]}</td> 
</c:forEach> 
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那么它会抛出错误。