boa tarde galera!
Estou com o seguinte problema: Tenho uma coleção de VO´s num arraylist e uma página jsp com tag´s do struts onde eu listo meus vo´s na página com a tag iterate. Um dos campos da página, é um checkbox que utilizo, para o usuário poder marcar os itens que desaja ajustar os valores de dos campos do vo. O problema é que o usuário seleciona um ou mais itens, submete a página. Quando a página volta, os checks voltam marcados, até aí está correto. Porém quando desmarco os checks, marco outros itens e submeto novamente a página, ele marca novamente os itens que havia desmarcado e trás os novos marcados. Como se não tivesse setando os itens desmardos para false. Alguém sabe como faço para setar esses itens desmarcados para false e os checks não virem marcados?
Você pode usar javascript, chamando a função abaixo no evento “onload” da sua página.
function deselecionar_tudo(){
for (i=0;i<document.form1.elements.length;i++)
if(document.form1.elements[i].type == "checkbox"){
document.form1.elements[i].checked=0
}
}
É o seguinte. Se você tem 3 campos checkbox, marca os 3 e submete a página a sua Action vai receber o conteúdo da propriedade value da sua tag html:checkbox, ou seja, receberá o valor dos 3 campos e vai setar no form.
Ao voltar pra tela (utilizando um forward direto pra sua tela JSP) esses campos estarão marcados, certo? Até aí tudo bem. O problema é que quando se desmarca todos os checkbox, submete a página, a action não vai receber nada pois a propriedade value estará nula. Então, o que vai aparecer na próxima vez que a página aparecer? Os 3 valores que o “action setou da última vez”, entendeu?
Uma das saídas pra isso é criar um campo hidden (HTML mesmo, sem ser tag struts) com o mesmo nome das suas outras checkbox, com a propriedade value=“NÃO ALTERAR”, daí esse campo sempre será submetido com alguma coisa e na próxima vez que você desmarcar os checkbox da tela aquele campo hidden é que salvará a pátria.
Entretanto, na sua action, você terá que desprezar esse campo hidden que fará parte do seu array de campo checkbox.
É uma saída paliativa que me ajudou num determinado momento, não sei precisar se é a mais correta, mas funciona.
bom dia pessoal a idéia que o julianostr teve foi muito boa e deve resolver o problema. O que eu fiz:
criei um atributo no meu vo chamado chkFlagMarcado e coloquei esse atributo como hidden no meu jsp, dentro do iterate da coleção de vo´s. Criei uma função javascript, que quando submeto meu form, chamo essa função que varre todos os checkbox da coleção e seta esse atributo chkFlagMarcado como “0” ou “1” se estiver desmarcado e marcado respectivamente. No método set do chkFlagMarcado, verifico se o valor deste atributo é 1 se for seto o meu atributo “marcado”(que é o checkbox) para true, senão seto para false, com isso consigo ter o controle dos checkbox que não estão marcados no momento. Um detalhe importante, é que o atributo hidden, tem que ser colocado depois do checkbox, para que o método set seja executado depois do set do atributo marcado.