Dúvida JSf + Primefaces

10 respostas
W

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.

10 Respostas

Hebert_Coelho

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

W

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

Hebert_Coelho

Mas isso não é problema web.

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

W

Estou utilizando o import java.sql.PreparedStatement;

Hebert_Coelho

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

W
O método da DAO
public List<Fornecedor> listar() 
		{
			List<Fornecedor> fornecedores = new ArrayList<Fornecedor>();
			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;
		}

Bean :

public DataModel<Fornecedor> getFornecedores()
	{
		fornecedorDAO = new FornecedorDao();
		List<Fornecedor> fornecedorList = fornecedorDAO.listar();
		fornecedores = new ListDataModel<Fornecedor>(fornecedorList);
		return fornecedores;
	}
	
	public void setFornecedores(DataModel<Fornecedor> fornecedores)
	{
		this.fornecedores = fornecedores;
	}

E a página :

<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:h="http://java.sun.com/jsf/html"  
    xmlns:f="http://java.sun.com/jsf/core"  
    xmlns:p="http://primefaces.org/ui">  
  
    <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>  
</html>
Hebert_Coelho

Onde e como você instancia o stmt?

W

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

public FornecedorDao()
	{
		conexao = new Conexao();
		try 
		{
			stmt = (PreparedStatement) conexao.getConexao().createStatement();
			
		}catch(SQLException ex) 
		{
			ex.printStackTrace();
		}
	}
rodrigo.bossini

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).

W

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

Criado 4 de junho de 2012
Ultima resposta 5 de jun. de 2012
Respostas 10
Participantes 3