ERRO: org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [<nomedoprojeto>] threw exception [null] with root cause javax.servlet.ServletException

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;
}

}

Ricardo,

Posta seu persistence.xml.

Obrigado pelo retorno. Segue código da classe Cidade.java e a CidadeDAOHibernate.java, não tenho o arquivo persistence.xml.

Código - Cidade.java

package oneTrade.cidade;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name=“trade.cidade”)
public class Cidade {

@Id
@SequenceGenerator(name="cid1",sequenceName = "seq_cidade")
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="cid1")
@Column(name="ci_id_cidade")
private Integer id;
@Column(name="ci_nome")
private String nome;
@Column(name="ci_estado")
private String estado;

public Cidade(){
	
}

public Cidade(String nome, String estado) {
	//super(); retirar esse comando
	this.nome = nome;
	this.estado = estado;
}

public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getEstado() {
	return estado;
}
public void setEstado(String estado) {
	this.estado = estado;
}

}

Código - CidadeDAOHibernate.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();
}

}