I'm new to Java and I'm having a hard time showing on the page a grid with data from a database table. I'm using java + hibernate + JSF 2 + tomcat 8. When I run my xhtml page it displays the below error. The problem is in the form's xhtml list, because the form editing runs smoothly. I've been trying to resolve a lot of time and I can not evolve.
Error
javax.servlet.ServletException: javax / enterprise / context / spi / Contextual Apr 11, 2016 11:11:04 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service () for servlet [Faces Servlet] in context with path [/] threw exception [null] with root cause javax.servlet.ServletException
Filter Code
@Override
public void doFilter(ServletRequest servletFilter, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
try { //trata exceção caso dê alguma coisa errada
/*O processamento inicial passa por este método*/
this.sf.getCurrentSession().beginTransaction(); //pega a sessão corrente e inicia uma transação
chain.doFilter(servletFilter, servletResponse); //passa o filter e o response para o filter chain
this.sf.getCurrentSession().getTransaction().commit(); //dá um comite na transação aberta acima
this.sf.getCurrentSession().close(); //fecha sessão corrente
} catch (Throwable ex) {
try { // trata o rollback
//verifica o status da transação e se estiver ativa dá um rollback
System.out.println("Deu exceção 1: " + ex);
if (this.sf.getCurrentSession().getTransaction().getStatus() == TransactionStatus.ACTIVE) {
this.sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable t) {
System.out.println("Deu exceção 2: " + t);
t.printStackTrace(); //joga a exceção do rollback e imprime na tela
}
throw new ServletException(); /*Joga a exceção*/
}
}
XHTML Code
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<ui:composition template="/templates/template.xhtml">
<ui:define name="pageTitle">Cidade</ui:define>
<ui:define name="pageHeader">Cadastro de Cidades</ui:define>
<ui:define name="body">
<h:form id="edicao">
<h:messages /> <!-- viabiliza as mensagens na tela -->
<h:panelGrid columns = "2">
<h:outputLabel value="Nome" />
<h:inputText value="#{cidadeBean.cidadeSelecionado.nome}" />
<h:outputLabel value="Estado" />
<h:inputText value="#{cidadeBean.cidadeSelecionado.estado}" />
</h:panelGrid>
<h:commandButton action="#{cidadeBean.salvar}" value="Salvar" />
</h:form>
<h:form id="lista">
<h:messages />
<h:dataTable value="#{cidadeBean.lista}" var="cidade" border = "1">
<f:facet name="header">Listagem de Cidades</f:facet>
<h:column>
<f:facet name="header">Nome</f:facet>
#{cidade.nome}
</h:column>
<h:column>
<f:facet name="header">Estado</f:facet>
#{cidade.estado}
</h:column>
</h:dataTable>
</h:form>
</ui:define>
</ui:composition>
City Code
package oneTrade.cidade;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
@ManagedBean(name = "cidadeBean")
@RequestScoped //vai ser do tipo request pois só vai enviar o formulário
public class CidadeBean {
private Cidade cidadeSelecionado = new Cidade();
private List<Cidade> lista = null;
public void salvar(){
CidadeRN cidadeRN = new CidadeRN();
cidadeRN.salvar(cidadeSelecionado);
FacesMessage faces = new FacesMessage("Cidade Cadastrada com sucesso");
FacesContext contexto = FacesContext.getCurrentInstance();
contexto.addMessage(null, faces);
}
public Cidade getCidadeSelecionado() {
return cidadeSelecionado;
}
public void setCidadeSelecionado(Cidade cidadeSelecionado) {
this.cidadeSelecionado = cidadeSelecionado;
}
public List<Cidade> getLista() {
CidadeRN cidadeRN = new CidadeRN();
if (lista == null){
lista = cidadeRN.listar();
}
return lista;
}
}
Code - CityDAOHibernate.java
package oneTrade.cidade;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
public class CidadeDAOHibernate implements CidadeDAO {
private Session sessao;
public Session getSessao() {
return sessao;
}
public void setSessao(Session sessao) {
this.sessao = sessao;
}
@Override
public void salvar(Cidade cidade) {
this.sessao.save(cidade);
}
@SuppressWarnings("unchecked")
@Override
public List<Cidade> listar() {
Criteria lista = sessao.createCriteria(Cidade.class);
return lista.list();
}
}
Following console error
Deu exceção 1: javax.servlet.ServletException: javax/enterprise/context/spi/Contextual
abr 13, 2016 9:21:49 PM org.hibernate.engine.internal.StatisticalLoggingSessionEventListener end
INFO: Session Metrics {
1254927 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
0 nanoseconds spent preparing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
0 nanoseconds spent executing 0 partial-flushes (flushing a total of 0 entities and 0 collections)
}
abr 13, 2016 9:21:49 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/oneTrade] threw exception [null] with root cause
javax.servlet.ServletException
at oneTrade.util.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:48)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)