java.lang.Integer cannot be cast to
Bom dia,
Estou com um problema em um conversor de OneToOne.
Estou usando NetBeans + JSF 2.0 + Hibernate + MySQL
Segue a baixo o erro.
Segue o faces
Segue o conversor.
Segue o entity
Segue o Bean
Espero ter colocado todas as informações necessárias para a solução do problema.
E desde já agradeço a atenção de todos.
Estou com um problema em um conversor de OneToOne.
Estou usando NetBeans + JSF 2.0 + Hibernate + MySQL
Segue a baixo o erro.
java.lang.ClassCastException: java.lang.Integer cannot be cast to teste02.entity.Folha at teste02.conversor.FolhaConverter.getAsString(FolhaConverter.java:39) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:521) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:794) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:847) at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
Segue o faces
<h:form>
Cadastro de Quadro <br/> <br/>
<h:panelGrid columns="2">
Quadro: <h:inputText id="cargoTxt" value="#{quadroBean.quadro.descquadro}"/>
Folha: <h:selectOneMenu id="quadroNr" value="#{quadroBean.quadro.fkfolha}">
<f:selectItems var="item" value="#{quadroBean.folhaLove}" itemValue="#{item.value}" itemLabel="#{item.label}"/>
<f:converter converterId="QuadroConverter"/>
</h:selectOneMenu>
<h:commandButton value="Salvar" action="#{quadroBean.adicionarQuadro()}"/>
</h:panelGrid>
</h:form>
Segue o conversor.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package teste02.conversor;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import teste02.dao.QuadroDao;
import teste02.entity.Quadro;
@FacesConverter(value="quadroConverter")
public class QuadroConverter implements Converter {
private QuadroDao quadroDao = new QuadroDao();
public QuadroConverter (){
}
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String arg2) {
Integer cdquadro = Integer.parseInt(arg2);
try {
return quadroDao.getquadro(cdquadro);
} catch (ClassCastException ex) {
Logger.getLogger(QuadroConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(QuadroConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
Quadro quadro = (Quadro) o;
return String.valueOf(quadro.getFkfolha());
}
}
Segue o entity
@Entity
@Table(name = "folha")
public class Folha implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "cd_folha")
private Integer cdfolha;
@Column(name = "desc_folha")
private String descfolha;
public Integer getCdfolha() {
return cdfolha;
}
public void setCdfolha(Integer cdfolha) {
this.cdfolha = cdfolha;
}
public String getDescfolha() {
return descfolha;
}
public void setDescfolha(String descfolha) {
this.descfolha = descfolha;
}
@Entity
@Table(name="quadro")
public class Quadro implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "cd_quadro")
private int cdquadro;
@Column(name = "desc_quadro")
private String descquadro;
@OneToOne
@JoinColumn(name="cd_folha")
private Folha fkfolha;
public int getCdquadro() {
return cdquadro;
}
public void setCdquadro(int cdquadro) {
this.cdquadro = cdquadro;
}
public String getDescquadro() {
return descquadro;
}
public void setDescquadro(String descquadro) {
this.descquadro = descquadro;
}
public Folha getFkfolha() {
return fkfolha;
}
public void setFkfolha(Folha fkfolha) {
this.fkfolha = fkfolha;
}
Segue o Bean
import java.util.LinkedList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
import teste02.dao.FolhaDao;
import teste02.dao.QuadroDao;
import teste02.entity.Folha;
import teste02.entity.Quadro;
/**
*
* @author Alex
*/
@ManagedBean
@RequestScoped
public class QuadroBean {
private List<Quadro> cachedQuadro = null;
private QuadroDao quadroDao = new QuadroDao();
private Quadro quadro = new Quadro();
private FolhaDao folhaDao = new FolhaDao();
/**
* Creates a new instance of QuadroBean
*/
public QuadroBean() {
}
public String adicionarQuadro() {
quadroDao.addQuadro(quadro);
/* quadro.setId(null); */
return "index";
}
public String removerQuadro(Quadro u) {
this.quadro = u;
quadroDao.removeQuadro(this.quadro);
return "index";
}
public List listarQuadro() {
cachedQuadro = quadroDao.getQuadro();
return this.cachedQuadro;
}
public String carregarQuadro(Quadro u){
quadro = u;
return "editar";
}
public String atualizarQuadro(){
quadroDao.updateQuadro(quadro);
return "index";
}
public String atualizarSenha(){
quadroDao.updateQuadro(quadro);
return "index";
}
public List<Quadro> getcachedQuadros() {
if (cachedQuadro == null) {
cachedQuadro = quadroDao.getQuadro();
}
return cachedQuadro;
}
public List<SelectItem> getFolhaLove() {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
for (Folha fl : folhaDao.getFolha()) {
toReturn.add(new SelectItem(fl.getCdfolha(),fl.getDescfolha()));
}
return toReturn;
}
public Quadro getQuadro() {
return quadro;
}
public void setQuadro(Quadro quadro) {
this.quadro = quadro;
}
@Override
public int hashCode() {
int hash = 7;
hash = 97 * hash + (this.quadro != null ? this.quadro.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final QuadroBean other = (QuadroBean) obj;
if (this.quadro != other.quadro && (this.quadro == null || !this.quadro.equals(other.quadro))) {
return false;
}
return true;
}
} Espero ter colocado todas as informações necessárias para a solução do problema.
E desde já agradeço a atenção de todos.
Alex Santos
Curtidas 0
Respostas
Marcelo Senaga
04/07/2013
O seu converter:
Deveria tratar a folha, e não o Quadrado, pois "item" é uma folha.
@FacesConverter(value="quadroConverter")
public class QuadroConverter implements Converter {
private QuadroDao quadroDao = new QuadroDao();
public QuadroConverter (){
}
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String arg2) {
Integer cdquadro = Integer.parseInt(arg2);
try {
return quadroDao.getquadro(cdquadro);
} catch (ClassCastException ex) {
Logger.getLogger(QuadroConverter.class.getName()).log(Level.SEVERE, null, ex);
} catch (Exception ex) {
Logger.getLogger(QuadroConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
Quadro quadro = (Quadro) o;
return String.valueOf(quadro.getFkfolha());
}
}
Deveria tratar a folha, e não o Quadrado, pois "item" é uma folha.
GOSTEI 0
Alex Santos
04/07/2013
Eu fiz a troca do conversor, mas o erro continua o mesmo.
Segue o meu conversor para folha
Segue o faces
Obrigado desde já.
Segue o meu conversor para folha
package teste02.conversor;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import teste02.dao.FolhaDao;
import teste02.entity.Folha;
/**
*
* @author Alex
*/
public class FolhaConverter implements Converter {
private FolhaDao folhaDao = new FolhaDao();
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String arg2) {
Integer cdfolha = Integer.parseInt(arg2);
try {
return folhaDao.getfolha(cdfolha);
} catch (Exception ex) {
Logger.getLogger(CargoConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
Folha folha = (Folha)o;
return String.valueOf(folha.getCdfolha());
}
}
Segue o faces
<h:panelGrid columns="2">
Quadro: <h:inputText id="cargoTxt" value="#{quadroBean.quadro.descquadro}"/>
Folha: <h:selectOneMenu id="quadroNr" value="#{quadroBean.quadro.fkfolha}" required="true" requiredMessage="Selecione a Folha">
<f:selectItems var="item" value="#{folhaBean.folhaLov}" itemValue="#{item.value}" itemLabel="#{item.label}"/>
<f:converter converterId="FolhaConverter"/>
</h:selectOneMenu>
<h:commandButton value="Salvar" action="#{quadroBean.adicionarQuadro()}"/>
</h:panelGrid>
Obrigado desde já.
GOSTEI 0
Marcelo Senaga
04/07/2013
Ao invés de retornar um List de SelectItem, retorne um List com os objetos folha.
É essa mescla de Folha com SelectItem que está matando o converter.
É essa mescla de Folha com SelectItem que está matando o converter.
GOSTEI 0
Alex Santos
04/07/2013
Ao invés de retornar um List de SelectItem, retorne um List com os objetos folha.
É essa mescla de Folha com SelectItem que está matando o converter.
É essa mescla de Folha com SelectItem que está matando o converter.
Eu já tinha tentado isto, mas o erro era um pouco diferente. Agora vi que faltava o () na chamada do método no faces.
Mas agora fiz as alterações e o erro continua.
faces
Folha: <h:selectOneMenu id="quadroNr" value="#{quadroBean.quadro.fkfolha}" required="true" requiredMessage="Selecione a Folha">
<f:selectItems var="item" value="#{folhaBean.getcachedFolhas()}" itemValue="#{item.cdfolha}" itemLabel="#{item.descfolha}"/>
<f:converter converterId="FolhaConverter"/>
</h:selectOneMenu>
Bean
public List<Folha> getcachedFolhas() {
if (cachedFolha == null) {
cachedFolha = folhaDao.getListFolha();
}
return cachedFolha;
}
Dao
public List<Folha> getListFolha() {
return getPureList(Folha.class,"from Folha fl");
}
Dao Generico
protected <T extends Serializable> List<T> getPureList(Class<T> classToCast,String query,Object... params) {
Session ses = getSession();
Query qr = ses.createQuery(query);
for (int i = 1; i <= params.length; i++) {
qr.setParameter(i, params[i-1]);
}
@SuppressWarnings("unchecked")
List<T> toReturn = qr.list();
ses.beginTransaction().commit();
ses.close();
return toReturn;
}
O Erro
java.lang.ClassCastException: java.lang.Integer cannot be cast to teste02.entity.Folha at teste02.conversor.FolhaConverter.getAsString(FolhaConverter.java:37) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:521) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:794) at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:847) at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:297) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312) at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185) at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722)
Agradeço qualquer ajuda.
Obrigado.
GOSTEI 0
Marcelo Senaga
04/07/2013
Quando você faz:
estará passando um int para o converter. Faça:
Ai vc passará o objeto folha.
itemValue="#{item.cdfolha}"
estará passando um int para o converter. Faça:
itemValue="#"
Ai vc passará o objeto folha.
GOSTEI 0
Alex Santos
04/07/2013
Funcionou assim como você falou e em primeiro lugar eu quero agradecer ao ms27817 que me ajudou muito.
Mas aproveito para perguntar, se da maneira inicial ele me passa o ID que é a FK com a outra tabela, por que ele dá a mensagem que não é possível converter em numero com converter null? e mesmo eu colocando ou não convertia.
Abraços e obrigado desde já.
Mas aproveito para perguntar, se da maneira inicial ele me passa o ID que é a FK com a outra tabela, por que ele dá a mensagem que não é possível converter em numero com converter null? e mesmo eu colocando
converter="number"
converter="integer"
Abraços e obrigado desde já.
GOSTEI 0
Marcelo Senaga
04/07/2013
Por receber um int, você poderia fazer:
Não dá para converter um int num objeto.
@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
Integer codFolha = (Integer)o;
return String.valueOf(codFolha);
}
Não dá para converter um int num objeto.
GOSTEI 0