JSF + Datatable getRowData

2 respostas
L

Bom dia galera,

seguinte estou com um problema com o datatable, estou querendo colocar um commandlink no codigo do cara até ai blz…mas quero que quando o usuario clique no link automaticamente esse registro apareça nos campos para que possa ser alterado.

Mas quando eu faço o seguinte comando da erro:

CadastroUf item = (CadastroUf) dataTable.getRowData();

Erro:

SEVERE: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
javax.faces.el.EvaluationException: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:97)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at javax.faces.component.UIData.broadcast(UIData.java:854)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at br.gov.sp.polmil.spe.beans.CadastroUf.edita(CadastroUf.java:188)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	... 21 more
18/03/2008 11:04:23 com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{cadastroUf.edita}: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
javax.faces.FacesException: #{cadastroUf.edita}: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at javax.faces.component.UIData.broadcast(UIData.java:854)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:97)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	... 20 more
Caused by: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at br.gov.sp.polmil.spe.beans.CadastroUf.edita(CadastroUf.java:188)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	... 21 more
18/03/2008 11:04:23 com.sun.faces.lifecycle.LifecycleImpl phase
WARNING: executePhase(INVOKE_APPLICATION 5,com.sun.faces.context.FacesContextImpl@b56559) threw exception
javax.faces.FacesException: #{cadastroUf.edita}: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:105)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.FacesException: #{cadastroUf.edita}: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at javax.faces.component.UIData.broadcast(UIData.java:854)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	... 15 more
Caused by: javax.faces.el.EvaluationException: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:97)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	... 20 more
Caused by: java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at br.gov.sp.polmil.spe.beans.CadastroUf.edita(CadastroUf.java:188)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	... 21 more
18/03/2008 11:04:24 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.ClassCastException: br.gov.sp.polmil.spe.persistencia.Uf
	at br.gov.sp.polmil.spe.beans.CadastroUf.edita(CadastroUf.java:188)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:131)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
	at javax.faces.component.UICommand.broadcast(UICommand.java:383)
	at javax.faces.component.UIData.broadcast(UIData.java:854)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
	at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

2 Respostas

2

Cara, eu uso um dataTable parecido com o seu. Em cada linha da minha tabela existe uma coluna chama ação, que tem dois botões (editar, apagar).

Se eu fosse vc faria assim também, fica mais prático e intuitivo. Mas de qualquer maneira vamos ao problema. Ao invés de utilizar um commandLink, use um commandButton mesmo. Quando é executado uma action, tudo que está dentro do form vai pra request, daí o que vc tem q fazer é em um Bean, pegar esses dados do request, e jogá-los nos inputs que vc deseja através de setters. Você tem que ter ligado já as variáveis nos campos respectivos, daí é só criar o método para salvar a alteração.

Espero ter ajudado, qualquer coisa post aí, o código se possível também.

V

Bom… você também pode fazer um método que pega esses dados, atribui eles a um atributo do tipo desejado e redireciona para a página de edição…

exemplo de uso com umaa classe “Cliente” qualquer:

a “action” do seu commandLink vai ser um método que redireciona para a página de edição…

exemplo:

action="#{cliente.editSetup}"

aí esse método vai instanciar o objeto do tipo cliente com os parâmetros que tem lá no form…

exemplo:

public String editSetup(){
   Cliente c = getClienteFromRequestParam(); //Esse método que pega a linha do DataTable que vc quer editar
   setCliente(c); // Supondo que, nesta mesma classe, vc tenha um atributo do tipo Cliente
   return "cliente_edit"; //Supondo que no "faces config" vc tenha um mapeamento de redirecionamento toda vez que essa string retornar pra request
}

agora, o método que seta o cliente de acordo com a request:

private Cliente getClienteFromRequestParam(){
   EntityManager em = getEntityManager(); //usando JPA, mas pode set HibernateUtil tbm ^^
        try{
            Cliente cli = (Cliente) getModel().getRowData(); //Obtém o cliente selecionado através do DataTable (agora sim o getRowData() \o/)
            cli = em.merge(cli);
            return o;
        } finally {
            em.close();
        }
}

Espero ter ajudado ^^

Criado 18 de março de 2008
Ultima resposta 18 de mar. de 2008
Respostas 2
Participantes 3