Autor Tema: org.apache.jasper.JasperException tomcat java al recorrer una coleccion  (Leído 11544 veces)

Eva

  • Sin experiencia
  • *
  • Mensajes: 23
    • Ver Perfil
Hola:
Tengo un problema para listar una colleccion, bah en realidad de la forma que lo estoy haciendo me devueve warning que no me dejan ver el archivo jsp cuando lo corro con ell servidor.

Para orientarlos: tengo una clase User con sus atributos id,name,fullname,etc.
y tengo un archivo jsp para listar los User..lo que hice fue generar dos listas distintas para diferenciar entre usuarios que me siguen de los usuarios a quienes sigo...

<p>Piratas que sigues</p>
            <div>
               <% List<User> siguiendo = (List<User>)request.getAttribute("siguiendo");
                  for(User cadaUnoQueSigue : siguiendo){
               %>
               <a href="#">
                  <% out.print(cadaUnoQueSigue.getUsername());%><img src="" border="0" width="40" height="40">
               </a>
               <% } %>
            </div>
            <p>Piratas que te siguen</p>
            <div>
               <%
               List<User> seguidores = (List<User>)request.getAttribute("seguidores");
               for(User cadaSeguidor : seguidores){
               %>
               <a href="#"><img src="">
                  <%out.print(cadaSeguidor.getFullName()); %></a>
               <%} %>
            </div>

Lo que esta en naranja son los warning que me detecta el eclipse y lo que me dice es: "Type safety: Unchecked cast from Object to List<User>", necesitaria que alguien me oriente a que se refiere esa correccion que me hace..Gracias
« Última modificación: 12 de Septiembre 2014, 17:07 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #1 en: 30 de Noviembre 2012, 22:38 »
Hola Eva, lo que veo es que al ejecutar el request.getAttribute(...) lo que obtienes como tipo devuelto es un Object, y el warning viene a reflejar que en tiempo de ejecución el Object puede estar conteniendo un List<User> pero el compilador avisa de que esto es una operación insegura: el Object podría contener un List<User> pero también podría contener otra cosa, el compilador no es capaz de llegar a determinarlo y por eso te lanza el warning.

Esa corrección es útil para que trates de evitar en tu código operaciones inseguras, aunque si tienes la seguridad de que el objeto devuelto contiene lo que tú crees puedes anular el warning añadiendo la siguiente línea de código:

@SuppressWarnings("unchecked")

Con esto en principio debería correr bien. Aquí te dejo un ejemplo, si ejecutas el código sin esa línea te saltará un warning, si lo ejecutas con esa línea no; en ambos casos la ejecución si la fuerzas es correcta.

Código: [Seleccionar]
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("unchecked")

public class testUser {

    public static void main (String[] Args) {

        User user1 = new User("Juan Pi", 32);
        User user2 = new User("Juan Po", 33);

        List <User> listaDeUsers = new ArrayList<User> ();
        listaDeUsers.add(user1);
        listaDeUsers.add(user2);

        Object nuevaListaDeUsers = new Object();
        nuevaListaDeUsers = listaDeUsers; //Ahora nueva lista de users contiene un arraylist de users

        List <User> listaDeUsers2;
        listaDeUsers2 = (List<User>)nuevaListaDeUsers;

        for (User tmp: listaDeUsers2) {
            System.out.println (tmp.toString());
        }

    }

}

Y la clase user

Código: [Seleccionar]
public class User {
    // instance variables - replace the example below with your own
    private int id;
    private String name;

    public User( String name, int id)    {
        this.id = id;
        this.name = name;
    }

    public String toString () {
        return ("" + "Usuario " + name + " con id " + id);
    }

}

kansadostoy

  • Sin experiencia
  • *
  • Mensajes: 26
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #2 en: 01 de Diciembre 2012, 15:18 »
Ogramar así sigues teniendo el warning aunque consigas que no salte y no moleste, ¿no podría hacerse de forma que no se tenga el warning?

Eva

  • Sin experiencia
  • *
  • Mensajes: 23
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #3 en: 01 de Diciembre 2012, 21:40 »
Probe con la linea de codigo que me indicaron y si bien dejo de mostrarmelo como warning, ahora me devuelve una excepcion:
org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /Index.jsp en línea 33

30:             <%
31:             @SuppressWarnings("unchecked")
32:             List<Tweet> tweetsSiguiendo = (List<Tweet>)request.getAttribute("tweetsFromUserFollowing");      
33:             for(Tweet todosLosTweetsSiguiendo : tweetsSiguiendo){
34:                %>
35:             <div id="eneTweet">
36:                <img alt="pirata1" src="" align="left" /><!-- redireccionar a perfil ajeno -->


Stacktrace:
   org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
   org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
   org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
   org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
   javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Mi pregunta es: Como la trato..???

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #4 en: 02 de Diciembre 2012, 13:45 »
kansadostoy, el hecho de tener un warning no supone que tu código esté mal construido. Simplemente es una advertencia, en unos casos puede ser por código mal construido pero en otros no. En este caso si el método te devuelve un Object tienes que hacer un casting o conversión al tipo que te sea útil para trabajar con él, no debe haber problema si controlas bien el proceso.
Respecto a la excepción que indica Eva supongo que está corriendo con Tomcat (tendrías que confirmarlo) y parece ser un problema de la configuración del Tomcat.

Eva

  • Sin experiencia
  • *
  • Mensajes: 23
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #5 en: 03 de Diciembre 2012, 00:40 »
Si, estoy usando el tomcat.. entonces, ¿como puedo arreglarlo? Porque no puedo ver ni ese jsp ni otros ya que me devuelven todos la misma excepcion y no puedo ver lo que estoy haciendo... :-(

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:Recorrer una coleccion
« Respuesta #6 en: 03 de Diciembre 2012, 14:53 »
Es posible que lo tengas mal instalado o que te falten librerías. Una opción es desinstalar y volver a instalar asegurándote de que eliges correctamente en función de qué versión de windows estés usando, si es de 32 bits o de 64 bits, qué versión de máquina virtual java estás usando, etc.

En la página de descarga antes de descargar http://tomcat.apache.org/ debería consultarse la documentación para ver todos los aspectos de configuración.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".