Executando uma action ao clicar em uma linha de um rich:dataTable

Posted by – September 29, 2007

Recentemente estava quebrando a cabeça com um código que permitisse a execução de um método no backingbean ao clicar em uma linha de um rich:dataTable, para resolver o problema criei o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<rich:dataTable width="100%"
    rows="15" cellpadding="3" cellspacing="1" border="0"
    rendered="#{! empty bean.clientes}"
    var="cliente" value="#{bean.clientes}"
    onRowMouseOver="this.className = 'onRowMouseOver';"
    onRowMouseOut="this.className = 'onRowMouseOut';"
    onRowClick="this.cells[0].firstChild.onclick();">
                           
    <f:facet name="header">
        <rich:columnGroup>
            <rich:column>
                <h:outputText value="Nome" />
            </rich:column>
            <rich:column>
                <h:outputText value="Data de Nascimento" />
            </rich:column>
            <rich:column>
                <h:outputText value="Endereço" />
            </rich:column>
        </rich:columnGroup>
    </f:facet>
                   
    <rich:column>
        <a4j:commandLink action="#{bean.exibirDadosCliente}"
            status="status" reRender="painelDadosCliente"  
                                 style="display: none;"/>
        <h:outputText value="#{cliente.nomeCliente}" />
    </rich:column>
    <rich:column>
        <h:outputText value="#{cliente.dataNascimento}" />
    </rich:column>
    <rich:column>
        <h:outputText value="#{cliente.endereco.logradouro}" />
    </rich:column>                     
</rich:dataTable>

A idéia é basicamente colocar um link invisível na primeira coluna do dataTable, antes de qualquer outro componente, e no evento onRowClick executar o código JavaScript this.cells[0].firstChild.onclick();

Share

3 Comments on Executando uma action ao clicar em uma linha de um rich:dataTable

  1. Arisson Leal says:

    Usando o dataTable com o da maneira que você fez os meus componentes do richfaces deixaram de funcionar na página em que a action deu o foward, isso apenas no Firefox.

    Existe alguma maneira de contornar esse erro ?

  2. rogerio says:

    Cara, o que pode estar acontecendo é que o onclick() não deve estar funcionando no Firefox, neste caso vc teria que usar click() quando a página estiver sendo visualizada neste browser.

  3. sousagomide says:

    :lol: hemrem, funcionou de prima. Tú é mesmo o cara.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>