Sou novo em Java e estou tendo dificuldades para mostrar na página um grid com dados de uma tabela do banco de dados. Estou usando java + hibernate + JSF 2 + tomcat 8. Quando executo minha página xhtml apresenta o erro abaixo. O problema está no form lista do xhtml, pois o form edição executa sem problemas.Estou a um bom tempo tentando resolver e não consigo evoluir.
Obs.: Não pude enviar anexos pois sou usuário novo do GUJ, colei os códigos abaixo.
Erro
javax.servlet.ServletException: javax/enterprise/context/spi/Contextual
abr 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
Código do Filtro
@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*/
}
}
Código do XHTML
<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>
Código do CidadeBean
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;
}
}