[Resolvido] Pesquisa por paramentro hibernate + JSP não funciona

Estou com um problema e não sei como resolver, em uma página tenho uma lista com vários nomes, então quando o usuário clicar em um dos nomes ele é redirecionado para uma nova página onde aparece todas as fotos do nome que ele clicou, mas o problema é o seguinte, não consigo fazer isso passando como parametro o id da pessoa, testei fazer sem o parametro e a pesquisa no banco funciona, lista tudo o que tiver, mas se eu colocar qualquer tipo de parametro me retorna um erro e não consigo entender o porque do erro.
JSP

        <jsp:useBean id="pesquisa" class="hibernateBD.FotoEnsaioDAO"/>
        <table>
            <c:forEach var="listaPesquisa" items="${pesquisa.lista}">
                <tr>
                    <td>${listaPesquisa.ensaio.nome}</td>
                </tr>
            </c:forEach>
        </table>

Servlet

        Integer id = Integer.parseInt(request.getParameter("id"));
        FotoEnsaioDAO fotoEnsaioDAO = new FotoEnsaioDAO();
        List<FotoEnsaio> pesquisas = new ArrayList<FotoEnsaio>();
        //pesquisas = fotoEnsaioDAO.getLista(id);
        pesquisas = fotoEnsaioDAO.getLista(id);
        request.setAttribute("lista", pesquisas);
        response.sendRedirect("ensaioPesquisa.jsp");

DAO

public List<FotoEnsaio> getLista(final int id) {
        session = hibernateUtil.getSessionFactory().openSession();
        Query query = session.createQuery("from FotoEnsaio where ensaio = " + id);
        List<FotoEnsaio> lista = query.list();
        return lista;
    }

Erro

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:500)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:428)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.NullPointerException
	javax.el.BeanELResolver$BeanProperty.read(BeanELResolver.java:280)
	javax.el.BeanELResolver$BeanProperty.access$000(BeanELResolver.java:230)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
	org.apache.el.parser.AstValue.getValue(AstValue.java:123)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
	org.apache.jsp.ensaioPesquisa_jsp._jspx_meth_c_005fforEach_005f0(ensaioPesquisa_jsp.java:111)
	org.apache.jsp.ensaioPesquisa_jsp._jspService(ensaioPesquisa_jsp.java:82)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Vi que o erro é um NullPointerException, mas não sei onde isto está ocorrendo, pois o meu netbeans está com problema, quando vou depuarar o projeto ele não mostra as variáveis diz que encontrou uma exceção inesperada :?. Então se alguém conseguir me dizer onde está o erro para que posso resolver já agradeço, pois só vou ter tempo de reinstalar o netbeans final de semana.

org.apache.jsp.ensaioPesquisa_jsp._jspx_meth_c_005fforEach_005f0(ensaioPesquisa_jsp.java:111)  
    org.apache.jsp.ensaioPesquisa_jsp._jspService(ensaioPesquisa_jsp.java:82) 

Por acaso tua jsp se chama ensaioPesquisa?
O erro diz que o EL não está sendo reconhecido.

Cara.

Alguns pontos:

  1. Do que eu lembro de JSP (Faz um tempo que só mexo com Facelets…), esse trecho abaixo tentará chamar um método getLista() - ‘sem parametros’:
    Vi que você não possui esse método em seu DAO, isso é um problema.
&lt;c:forEach var="listaPesquisa" items="${pesquisa.lista}"&gt;  
  1. Vi que em seu Servlet você coloca um atributo no request chamado “lista” e depois manda um “sendRedirect”, isto não vai funcionar, a variável “lista” não estará disponível no JSP pois o sendRedirect manda o browser iniciar uma nova requisição:
request.setAttribute("lista", pesquisas);  
response.sendRedirect("ensaioPesquisa.jsp"); 

Quanto a esse problema, tente usar forward via RequestDispatcher - achei no google uma página aqui: http://www.brics.dk/~amoeller/WWW/jsp/jspservlets.html

  1. Creio que você não necessite acessar o DAO diretamente da JSP, você já está pegando a lista desejada, usando um RequestDispatcher para fazer um forward você poderá usar diretamente a variável “lista” que está atribuindo à request, exemplo:
&lt;table&gt;  
    &lt;c:forEach var="fotoEnsaio" items="${lista}"&gt;  
        &lt;tr&gt;  
            &lt;td&gt;${fotoEnsaio.ensaio.nome}&lt;/td&gt;  
        &lt;/tr&gt;  
    &lt;/c:forEach&gt;  
&lt;/table&gt;

Qualquer coisa grita.

[quote=renandemelo]Cara.

Alguns pontos:

  1. Do que eu lembro de JSP (Faz um tempo que só mexo com Facelets…), esse trecho abaixo tentará chamar um método getLista() - ‘sem parametros’:
    Vi que você não possui esse método em seu DAO, isso é um problema.
&lt;c:forEach var="listaPesquisa" items="${pesquisa.lista}"&gt;  
  1. Vi que em seu Servlet você coloca um atributo no request chamado “lista” e depois manda um “sendRedirect”, isto não vai funcionar, a variável “lista” não estará disponível no JSP pois o sendRedirect manda o browser iniciar uma nova requisição:
request.setAttribute("lista", pesquisas);  
response.sendRedirect("ensaioPesquisa.jsp"); 

Quanto a esse problema, tente usar forward via RequestDispatcher - achei no google uma página aqui: http://www.brics.dk/~amoeller/WWW/jsp/jspservlets.html

  1. Creio que você não necessite acessar o DAO diretamente da JSP, você já está pegando a lista desejada, usando um RequestDispatcher para fazer um forward você poderá usar diretamente a variável “lista” que está atribuindo à request, exemplo:
&lt;table&gt;  
    &lt;c:forEach var="fotoEnsaio" items="${lista}"&gt;  
        &lt;tr&gt;  
            &lt;td&gt;${fotoEnsaio.ensaio.nome}&lt;/td&gt;  
        &lt;/tr&gt;  
    &lt;/c:forEach&gt;  
&lt;/table&gt;

Qualquer coisa grita.
[/quote]
1 - ele não acessa o DAO diretamente da JSP
2 - Não existe nada que impeça setar algo no request e na JSP chamar o request.getAttribute(“lista”);
3 - É o que ele está tentando fazer.

Tenho sim uma jsp chamada ensaioPesquisa, é nela que quero mostrar o resultado depois que o usuário clicar no nome.
Só não entendi o que você quis dizer com isso:

E a respeito do que o renandemelo falou não preciso alterar o que ele disse então?

Posta toda essa ensaioPesquisa.jsp

1.Cara, do que eu entendo, isso aqui é acessar o DAO diretamente do jsp:

&lt;jsp:useBean id="pesquisa" class="hibernateBD.FotoEnsaioDAO"/&gt; 
  1. De fato, nada impede ele dar um request.getAttribute(“lista”); porém esse atributo estará zerado por causa do “sendRedirect” (que processará o jsp em outra requisição, isto é, outro objeto “request”)

  2. Não era bem o que o código estava fazendo, visto que no jsp ele chamava um método “getLista” de “pesquisa”, invés de utilizar a lista já capturada pelo Servlet e associada ao request.

Vlw pelas dicas aí pessoal, consegui fazer o que estava querendo, segui as dicas do renandemelo, como estou começando com jsp/servlet não sabia que quando da um sendRedirect zera todas as variáveis. Então o código ficou assim

JSP

      <table>
            <c:forEach var="listaPesquisa" items="${lista}">
                <tr>
                    <td>${listaPesquisa.ensaio.nome}</td>
                </tr>
            </c:forEach>
        </table>

Servlet

        Integer id = Integer.parseInt(request.getParameter("id"));
        FotoEnsaioDAO fotoEnsaioDAO = new FotoEnsaioDAO();
        List<FotoEnsaio> pesquisas = new ArrayList<FotoEnsaio>();
        pesquisas = fotoEnsaioDAO.getLista(id);
        HttpSession session = request.getSession(true);
        session.setAttribute("lista", pesquisas);
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/ensaioPesquisa.jsp");
        dispatcher.forward(request, response);

DAO

   public List<FotoEnsaio> getLista(int id) {
        session = hibernateUtil.getSessionFactory().openSession();
        Query query = session.createQuery("from FotoEnsaio where ensaio = " + id);
        List<FotoEnsaio> lista = query.list();
        return lista;
    }