Dúvida JSf + Primefaces

Olá Galera,

seguinte, estou fazendo um pequeno cadastro de fornecedores utilizando JSF e PrimeFaces. Ao iniciar o meu servidor ele me apresenta o seguinte erro :

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement
javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)

root cause

java.lang.ClassCastException: org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement
dao.FornecedorDao.(FornecedorDao.java:24)
bean.FornecedorBean.getFornecedores(FornecedorBean.java:78)
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:64)
com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
org.apache.el.parser.AstValue.getValue(AstValue.java:169)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:192)
com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:193)
javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:181)
javax.faces.component.UIData.getValue(UIData.java:557)
javax.faces.component.UIData.getDataModel(UIData.java:1297)
javax.faces.component.UIData.setRowIndex(UIData.java:450)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:81)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:829)
javax.faces.component.UIData.encodeBegin(UIData.java:940)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1672)
javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:854)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1674)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:1677)
com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:399)
com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:509)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.2 logs.

Se alguém puder me ajudar, não tenho a minima idéia de por onde começar a resolver este erro.

Parece que você está utilizando o PreparedStatement errado:
org.postgresql.jdbc4.Jdbc4Statement cannot be cast to java.sql.PreparedStatement

Poderia ser mais preciso? Sou meio novo na área de Web.

Mas isso não é problema web.

No código que você utiliza PreparedStatement, verifique qual o pacote você está importando.

Estou utilizando o import java.sql.PreparedStatement;

Tem como você colocar o código da consulta?

O método da DAO

[code]public List listar()
{
List fornecedores = new ArrayList();
try
{
ResultSet rs = stmt.executeQuery(“SELECT * FROM fornecedor ORDER BY nome”);
while(rs.next())
{
Fornecedor fornecedor = new Fornecedor();
fornecedor.setCod(rs.getInt(“cod”));
fornecedor.setNome(rs.getString(“nome”));
fornecedor.setCep(rs.getString(“cep”));
fornecedor.setEndereco(rs.getString(“endereco”));
fornecedor.setCnpj(rs.getString(“cnpj”));
fornecedor.setCidade(rs.getString(“cidade”));
fornecedor.setUf(rs.getString(“uf”));
fornecedor.setInscricaoestadual(rs.getString(“inscricaoestadual”));
fornecedor.setEmail(rs.getString(“email”));
fornecedor.setTelefone(rs.getString(“telefone”));

				fornecedores.add(fornecedor);
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			conexao.fecharConexao();
		}
		
		return fornecedores;
	}[/code]

Bean :

[code] public DataModel getFornecedores()
{
fornecedorDAO = new FornecedorDao();
List fornecedorList = fornecedorDAO.listar();
fornecedores = new ListDataModel(fornecedorList);
return fornecedores;
}

public void setFornecedores(DataModel<Fornecedor> fornecedores)
{
	this.fornecedores = fornecedores;
}[/code]

E a página :

[code]

<h:head> 
<CENTER> 
<h1>Consulta de Fornecedores</h1>
</CENTER>
</h:head>  
 
<h:body>  

<h:form>

	<h:dataTable value="#{fornecedorBean.fornecedores}" var="c">
		<h:column>
		
		<f:facet name="header"><h:outputText value="Código"/></f:facet>
		<h:outputText value="#{c.cod}"/>
		
		<f:facet name="header"><h:outputText value="Nome"/></f:facet>
		<h:outputText value="#{c.nome}"/>
		
		
		<f:facet name="header"><h:outputText value="CEP"/></f:facet>
		<h:outputText value="#{c.cep}"/>
		
		<f:facet name="header"><h:outputText value="Endereço"/></f:facet>
		<h:outputText value="#{c.endereco}"/>
		
		<f:facet name="header"><h:outputText value="CNPJ"/></f:facet>
		<h:outputText value="#{c.cnpj}"/>
		
		<f:facet name="header"><h:outputText value="Cidade"/></f:facet>
		<h:outputText value="#{c.cidade}"/>
		
		<f:facet name="header"><h:outputText value="UF"/></f:facet>
		<h:outputText value="#{c.uf}"/>
		
		<f:facet name="header"><h:outputText value="Inscrição Estadual"/></f:facet>
		<h:outputText value="#{c.inscricaoestadual}"/>
		
		<f:facet name="header"><h:outputText value="E-mail"/></f:facet>
		<h:outputText value="#{c.email}"/>
		
		<f:facet name="header"><h:outputText value="Telefone"/></f:facet>
		<h:outputText value="#{c.telefone}"/>
		
		</h:column>
	</h:dataTable>

</h:form>

</h:body>  
[/code]

Onde e como você instancia o stmt?

O cast que o erro se referir, eu creio que seja esse na DAO, mas não vejo problema aqui :

[code] public FornecedorDao()
{
conexao = new Conexao();
try
{
stmt = (PreparedStatement) conexao.getConexao().createStatement();

	}catch(SQLException ex) 
	{
		ex.printStackTrace();
	}
}	[/code]

O método createStatement retorna um objeto do tipo Statement. Chame o método prepareStatement para obter um PreparedStatement (esse casting nem será necessário).

Muito obrigado pela ajuda. Consegui resolver o problema com as dicas acimas!