Boa tarde galera guj.
Estou precisando pegar o valor da linha quando eu clico em qualquer lugar na linha da tabela. Eu utilizo rich:datatable e eu popula minha table com um List e um ListDataModel que recebe essa lista de Departamentos. Se eu crio uma coluna com um commandLink e no meu bean eu faço um cast eu consigo disparar o metodo do bean e pegar o valor, por exemplo:
Departamento dp = (Departamento)dataModel.getRowData();
Mas, eu nao posso criar uma coluna com comandlink nessa tela. Eu preciso é clicar na linha e disparar o metodo que tem o codigo acima com a linha selecionada.
OBS.: eu tentei utilizar o <a4j:support action="#{pesquisaDepartment.selectItem}" event=“onclick”/>, mas nao deu certo.
Se alguem puder me ajudar, agradeço desde ja.
Vei… Algumas perguntas…
Voce ta populando sua table com um ListDataModel(List list)??
Quando vc clica na linha, pelo menos chama o metodo?
Caso suas duas respostas acima seja sim, vc deve pegar o objeto assim:
public void pegarUsuario(ActionListener e){
Usuario usuario = (Usuario) dataModel.getRowData();
}
Caso nao seja assim, responda como vc carregando seu objeto e se pelo menos chama o metodo.
Vamos ver se pelo menos o metodo chama…
Ah, a tabela ta sendo popula ne?!
troca os eventos
<a4j:support event="onRowClick" action="#{usuarioMB.pegarUsuario}" />
//NO SEU BEAN VC FAZ ASSIM
public void pegarUsuario(){
System.out.println(usuario.getNome());
}
Caso vc precise que seja no ActionListener, troque o evento do bean de ActionListener para ActionEvent.
Testa ai e me fala…
//ISSO SERA SEU BEAM... ESSE dt é quem vai popular sua table na tela...
private DataModel dt;
private List<Usuario> list;
public List<InterfaceFailure> getList() {
if(list == null)
list = new ArrayList<Usuario>();
return list;
}
public DataModel getDt() {
dt = new ListDataModel(list);
return dt;
}
public void listarTodosUsuarios(){
UsuarioFacade usuarioService = new UsuarioFacadeImp();
this.list = usuarioService.listarTodosUsuarios();
return this.listaUsuario;
}
public void pegarUsuario(){
Usuario user = (Usuario) dt.getRowData();
}
sua JSP
//aki na sua rich:dataTable vc vai referenciar o dt do seu bean e vai setar uma var = "dt". A var pode ser qualquer coisa q quiser.
<rich:dataTable
id="tableUsuario" value="#{usuarioMB.dt}" var="dt" reRender="ds">
<a4j:support event="onRowClick" action="#{usuarioMB.pegarUsuario}" />
<f:facet name="header">
<rich:columnGroup>
<rich:column>
<h:outputText value="nome" />
</rich:column>
<rich:column>
<h:outputText value="usuario" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:outputText value="#{dt.userName}" />
</rich:column>
<rich:column>
<h:outputText value="#{dt.user}" />
</rich:column>
<f:facet name="footer">
<rich:datascroller id="ds" renderIfSinglePage="false"></rich:datascroller>
</f:facet>
</rich:dataTable>
Vê se vc intende ai vei… No meu projeto aki eu so faço assim e nao tenho problemas.
SEVERE: Error Rendering View[/listar/listarEvento.xhtml]
java.io.NotSerializableException: javax.faces.model.ListDataModel
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1156)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at java.util.HashMap.writeObject(HashMap.java:1000)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:945)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1461)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1338)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1146)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326)
at com.sun.faces.renderkit.ResponseStateManagerImpl.writeState(ResponseStateManagerImpl.java:244)
at javax.faces.render.ResponseStateManager.writeState(ResponseStateManager.java:155)
at org.ajax4jsf.application.AjaxStateManager.writeState(AjaxStateManager.java:294)
at org.ajax4jsf.application.AjaxStateManager.writeState(AjaxStateManager.java:256)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:620)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.netcontrol.filtro.AuthFilter.doFilter(AuthFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:191)
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:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)
Velho… verifica se seus Imports sao do pacote javax. Utilize somente os imports desse pacote.
Aki no meu sistema, nao tive problemas nenhum.
qq coisa, posta ai.