Pegar valor da linha selecionada rich:datatable

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.

abraços…

Alguem pode ajudar como pegar o valor da linha somente clicando na linha gente?

Boa tarde galera. Eu consegui resolver o meu problema em outro post.

http://www.guj.com.br/posts/list/0/137672.java#1068015

Eu estava no caminho certo, porem com o evento errado.

Ao indes de:

<a4j:support action="#{pesquisaDepartment.selectItem}" event="onclick"/>

Coloquei assim e consegui pegar o valor da linha

<a4j:support event="onRowClick" action="#{pesquisaDepartment.getRowSelected}"/> 

Fica a dica para quem precisar.

Dae cara blz?

Estou com o mesmo problema e fiz como você falou, mais não funciona, segue código:

[code]a4j:form


<rich:dataTable id=“tabelaUsuario” value="#{usuarioMB.listaUsuario}" var=“usuario” width=“500”
onRowMouseOver=“this.style.backgroundColor=’#BFDFEA’”
onRowMouseOut=“this.style.backgroundColor=’#{a4jSkin.tableBackgroundColor}’”>
            <a4j:support event="onRowClick" actionListener="#{usuarioMB.pegarUsuario}" />

        <rich:column sortBy="#{usuario.nome}">
            <f:facet name="header">
            Nome
            </f:facet>
            <h:outputText value="#{usuario.nome}"/>
        </rich:column>
       </rich:dataTable>
[/code]

MB:

public void pegarUsuario(ActionListener e){ System.out.println(usuario.getNome()); }

Grato.

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.

at+

Cara seguinte…

Voce ta populando sua table com um ListDataModel(List list)??

Estou usando um List segue o codigo:

public List<Usuario> listarTodosUsuarios(){ UsuarioFacade usuarioService = new UsuarioFacadeImp(); this.listaUsuario = usuarioService.listarTodosUsuarios(); return this.listaUsuario; }

Quando vc clica na linha, pelo menos chama o metodo?

Não =/

Vei faz o seguinte…

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…

Cara obrigado pela ajuda.

Ele nem está entrando no método.

Você falou que ele tem que ser um ListDataModel(List list), porque a minha lista é um List normal, e ele esta populando os campos do dataTable.

Segue o código completo:

[code]Usuario usuario = new Usuario();
List listaUsuario = new ArrayList();

public UsuarioMB(){
    
}

public List<Usuario> listarTodosUsuarios(){
    UsuarioFacade usuarioService = new UsuarioFacadeImp();
    this.listaUsuario = usuarioService.listarTodosUsuarios();
    return this.listaUsuario;
}

public void pegarUsuario(){
    System.out.println(usuario.getNome());
}

/Get e Set/[/code]

E meu dataTable:

 <a4j:form>
        <div style="height: 200px;width: 500px;overflow: auto">
            <rich:dataTable id="tabelaUsuario" value="#{usuarioMB.listaUsuario}" var="usuario" width="500" 
                    onRowMouseOver="this.style.backgroundColor='#BFDFEA'"
                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'">

                <a4j:support event="onRowClick" action="#{usuarioMB.pegarUsuario}"/>

            <rich:column sortBy="#{usuario.nome}">
                <f:facet name="header">
                Nome
                </f:facet>
                <h:outputText value="#{usuario.nome}"/>
            </rich:column>

Grato.

te passar um exemplo aki rapidao que vc vai conseguir fazer…marcai


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

Cara tem como me passar os imports também?

Ele ta dando um erro louco:

SEVERE: Error Rendering View[/listar/listarEvento.xhtml] java.io.NotSerializableException: javax.faces.model.ListDataModel

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

Olha o erro que ta dando:

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.

vlw

Você poderia checar se é necessário ou não serializar a classe!

Adiciona um implements serializable nela… testa aí!

Velho… Creio que nao seja isso pq eu nao precisei fazer isso aki… Mas, nao custa fazer o teste…