tags:

views:

381

answers:

2

Hi All i am facing a problem while using the forEach for iteration i am giving the complete code please tell me whats wrong with this.

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"&gt;  
<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 code:

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 code:

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

I am getting the following error i am unable to understand .

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

Please help. Thanks

+5  A: 

I think this is because the URI in your taglib declaration is incorrect. It should be

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

instead of

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

The one you're using is for the old, pre-JSP-2.0 library, which didn't support runtime expressions (the expression was passed in as a raw String and evaluated by the tag itself, rather than the JSP engine).

edit: Looks like it's the same problem you had with http://stackoverflow.com/questions/2168832/expression-language-in-jsp-not-working

skaffman
In that other question he had initially problems with EL in template text.
BalusC
Thanks very mush sir. the problem is with tag library only.
Glad it helped you. Please don't forget to mark his answer to **Accepted** by clicking the big white checkmark on the left hand side :) That's how it is supposed to work here at Stackoverflow: http://stackoverflow.com/faq
BalusC
A: 

You can try :

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