Desmarcar checkbox

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?

abs

Bom, vc está usando Struts, certo?

Então, para vc poder desmarcar, tem que definir na sua Form uma função reset… e lá resetar os valores dos arrays. Algo como:

    public void reset(ActionMapping mapping, HttpServletRequest request) {
       
       vetorSelecionados = new String[0]; 
       
    }

Espero q isso ajude.

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.

abs