Richfaces:DataTable contendo combos dinâmicas - Problemas

4 respostas
H

Bom dia, Pessoal.

Estou com um problema complicado de se resolver. Já tentei de umas 6 forma diferentes de implementar mas nada de solução adequada ainda.

A situação é a seguinte:
Tenho 1 DataTable de 3 colunas. Em cada linha gerada no dataTable eu tenho um combobox por coluna.

Essas combobox são dinâmicas, ou seja, quando selecionar um valor na combo A é realizada uma ação que cria a lista do combo B e ao selecionar um valor na combo B se cria um lista preenchendo a combo C.

Problema: As combos buscam as listas dentro do bean da mesma lista, quando eu tenho mais de 1 linha no dataTable quando eu selecionar a combo A na linha 2 isso irá influenciar a combo da linha 1 e assim por diante.

Solução:

  • Preciso de uma solução para preencher as combos de forma independente, onde uma linha não interfira na outra linha?
  • Outra coisa, tenho que dar reender nas combos para elas carregarem as lista, então ao dar reRender elas não podem perder os valores nas linhas anteriores.

Aguardo a colaboração de todos. (Ninjas ou não … rs)

Desde já, agradeço pela atenção de todos e vamos ver quantos ninjas no Java/Algorítmos temos por aqui…rs

4 Respostas

T

Use a rich:datatable, tem um atributo chamado rowKeyVar. tu podes atribuir o índice da linha a uma variável e usá-la para montar o id das combos.

<rich:dataTable rowKeyVar="indice"> <!-- os outros atributos você preenche -->
   <rich:column>
       <h:selectOneMenu id="selectA#{indice}" />
   </rich:column>
   <rich:column>
       <h:selectOneMenu id="selectB#{indice}" />
   </rich:column>
   <rich:column>
       <h:selectOneMenu id="selectC#{indice}" />
   </rich:column>
</rich:dataTable>

aí você usa os reRender’s se referenciando ao id, por exemplo:

<rich:column>
       <h:selectOneMenu id="selectA#{indice}">
          <a4j:support reRender="selectB#{indice}" event="onchange" />
       </h:selectOneMenu>
   </rich:column>

Na tag selectItems, eu costumo colocar como value um método que retorna os valores da select, dado o valor da select da qual ele depende.

H

Obrigado pela resposta thierrypin.

O meu peoblema estava mesmo no momento em que eu populava as combos, eu precisava popular cada combo de forma que estando em linhas diferentes buscassem o valor de um lugar diferente.

Ex.:

Coluna | A | B | C |
Linha 1 |combo A|combo B|combo C|
Linha 2 |combo A|combo B|combo C|
Linha 3 |combo A|combo B|combo C|

Se você ver, como as combos são os mesmos combonentes só que em linhas diferentes logo elas populam-se buscando as informações do mesmo lugar.

Eu resulvi isso colocando as listas das combos A B e C dentro do objeto que eu populo uma linha, sendo assim, eu carrego cada combo um lista personalizada ao seu objeto que perce, na linha que está.

rsrs…

Mais uma vez, obrigado pelo retorno e informação.

Abraço e fica com Deus. 8)

T

Gostei da solução.
Lembra que tu não precisas armazenar as listas. Se tu obteres elas via métodos, funciona igualzinho.

H

thierrypin:
Gostei da solução.
Lembra que tu não precisas armazenar as listas. Se tu obteres elas via métodos, funciona igualzinho.

Bom dia, thierrypin.

Antes eu tinha tentado obter através de método, mas como eu precisava ficar manipulando as mesmas listas todo momento e fazer regras de negócios baseadas no estado dela para obter o preenchimento de um outro combobox resultante dos 3 primeiros combos, acabei precisando desta solução que utilizei.

Agradeço a atenção e ajuda prestadas.

Abraço e fica com Deus. :smiley:

Criado 17 de fevereiro de 2011
Ultima resposta 18 de fev. de 2011
Respostas 4
Participantes 2