Listar resultado de uma Criteria em JSP

Eae galera,
Estou tentando listar resultados de uma consulta realizada pelo Hibernate em uma página jsp, tenho as seguintes classe:
ProdutoDao.java

public List<Produto> getLista(){
		return this.session.createCriteria(Produto.class).list();
	}

E na minha página jsp:

<jsp:useBean id="dao" class="projeto.ProdutoDao"/>
<c:forEach var="produto" items="${dao.lista}" varStatus="id">
		${produto.nome}			
		</c:forEach>

mas me retorna o seguinte erro:

root cause

org.apache.jasper.el.JspELException: /novoProduto.jsp(33,2) ‘${dao.lista}’ Error reading ‘lista’ on type projeto.ProdutoDao
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:112)
org.apache.jsp.novoProduto_jsp._jspx_meth_c_005fforEach_005f0(novoProduto_jsp.java:137)
org.apache.jsp.novoProduto_jsp._jspService(novoProduto_jsp.java:103)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
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)

root cause

java.lang.NullPointerException
projeto.ProdutoDao.getLista(ProdutoDao.java:36)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:106)
org.apache.jsp.novoProduto_jsp._jspx_meth_c_005fforEach_005f0(novoProduto_jsp.java:137)
org.apache.jsp.novoProduto_jsp._jspService(novoProduto_jsp.java:103)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
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)

preciso de uma luz…

A luz é, a própria mensagem de erro diz exatamente a linha em que o erro aconteceu:
projeto.ProdutoDao.getLista(ProdutoDao.java:36)

O que você tem aí? Alguma coisa está null. O que é?

public List<Produto> getLista(){ return this.session.createCriteria(Produto.class).list(); }

Mas eu acho que entendi, a Session eu coloquei no construtor do ProdutoDao, mas como a jsp:useBean chama o construtor sem parâmetro a Session não foi criada.
Então eu deveria colocar no método getLista? Mas daí para cada chamada de lista iria iniciar uma sessão, acho que isso seria um gargalo, qual seria a melhor maneira?

[quote=moiado]public List<Produto> getLista(){ return this.session.createCriteria(Produto.class).list(); }

Mas eu acho que entendi, a Session eu coloquei no construtor do ProdutoDao, mas como a jsp:useBean chama o construtor sem parâmetro a Session não foi criada.
Então eu deveria colocar no método getLista? Mas daí para cada chamada de lista iria iniciar uma sessão, acho que isso seria um gargalo, qual seria a melhor maneira?[/quote]Você tem várias abordagens.

  1. Instanciar e finalizar no método a session.
  2. Utilizar OpenSessionInView
  3. Deixar o servidor controlar a transação (dependendo como seu projeto está criado).

Vlw Hebert, vou estudar mais sobre o assunto.

Obrigado.