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