25 abril 2009

displaytag + checkbox

Passei a semana toda tentando procurar uma solução para que o displaytag modificasse a propriedade de um bean (bind?). Fiquei decepcionado ao ler certas coisas sobre a displaytag na internet, e o principal trecho eu reproduzo abaixo:

No. Displaytag in no way manages any input controls you might place on the table [Rick Herrick]


Concluí que só seria possível fazer algo do gênero através de ajax. Pois bem... Consegui fazer com que, ao clicar no checkbox, a propriedade em questão fosse setada.

<script type="text/javascript" >
function ajaxCaller(idDiv,idItem){
  ...
  new Ajax.Updater(idDiv, action, {
    method: 'get', 
    parameters: 'idItem='+idItem
  });
  ...
}
</script>

<div id="divGrid">
  ...
    <display:table id="item" ...  >
      ...
      <display:column>
        <html:checkbox ... 
         onclick="ajaxCaller('divGrid','${item.id}')"/>
      </display:column>
      ...
    </display:table>
  ...
</div>

Dentro da action chamada pelo Ajax.Updater(), é só pegar o item da coleção com o respectivo id e setar a propriedade em questão, de acordo com a lógica adotada. Note que, com isso, é possível também utilizar campos do tipo text e select, usando o evento onchange/onblur ao invés do onclick usado no checkbox.

Agora eu só preciso ajeitar os parâmetros de paginação, pra que quando eu selecione um item da coleção numa pagina diferente da primeira, a displaytag permaneça na mesma página, sem maiores complicações. Há dois atributos da display:table chamado keepStatus e clearStatus, mas eu estou começando a perceber que tenho que usá-los com moderação...

Comentários
0 Comentários

0 comments:

Postar um comentário

Regras são chatas, mas...

- Seu comentário precisa ter relação com o assunto do post;
- Em hipótese alguma faça propaganda de outros blogs ou sites;
- Não inclua links desnecessários no conteúdo do seu comentário;
- Se quiser deixar sua URL, comente usando a opção OpenID;
- CAIXA ALTA, miguxês ou erros de ortografia não serão tolerados;
- Ofensas pessoais, ameaças e xingamentos não são permitidos;