Probblemas com CheckBox na JSP

8 respostas
V

Bom dia a todos,

Será que alguém poderia por favor me ajudar com um probleminha que estou a 1 semana.
Criei uma página jsp com uma tabela e um formulário logo acima da tabela com alguns campos que são carregados quando selecionado algum tópico da tabela. Só que nesse formulário tem um campo checkbox que não esta funcionando como deveria.
Na tabela abaixo onde é selecionado os itens, tem um campo chamado “Ativo”, e esse campo pode ser “Sim” ou “Não”.
No Banco de Dados o “Sim” é representado pelo número “1” e o “Não” pelo número “0”.
Mas quando clico na opção que tem o “Sim”, ele checa direitinho no formulário, porém quando dou um “unchecked” e clico no botão alterar, ele não esta fazendo a alteração, a variável passa vazio. Quando faço o processo inverso a esse descrito acima, a alteração funciona.

Agradeço desde já a ajuda de vcs.

Abs.

8 Respostas

L

Bom dia, até onde eu sei qdo vc da um “unchecked” essa informação não eh passada no request, ou seja, sempre vai ser null.
Eu tive esse problema tb e resolvi da seguinte forma: eu faço um teste na action q recebe esse checkbox qdo for null recebe 0.

V

Realmente esse detalhe eu não tinha me atentado. Mas vc poderia me dizer como fez esse teste na Action?
Eu coloquei alguns “System.out” para verificar se tinha algum conteúdo na variável, mas ela continua vindo “null”.

No meu Form, eu faço uma comparação do tipo:
Se for “SIM”
seto “1”
Senão
seto “0”

Obrigado.

L

Testa primeiro se for null

if(variavel == null)
seta 0

V

Léo,

Esse aqui é o metodo de alteração que esta na minha Action.

public ActionForward executaAlteracao(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response)

throws Exception {

CadCanalVendaForm canalVendaForm = (CadCanalVendaForm) form;
//carregando o bean
	CadCanalVendaVO canalVendaVO = new CadCanalVendaVO();
	System.out.println("CadCanalVendaAction - valor getValidado: " + canalVendaForm.getValidado());
	if (canalVendaForm.getValidado() == null){
		canalVendaVO.setValidado(0);
	}else{
		 if (canalVendaForm.getValidadoTexto().equals("Sim")){
			canalVendaVO.setValidado(1);
		}else{
			canalVendaVO.setValidado(0);
		}	
	}		
	
	canalVendaVO.setCanalVenda(canalVendaForm.getCanalVenda());		
	System.out.println("executaAlteracao canalVendaForm.naoUsarNoRAA: " + canalVendaForm.getValidado());
	
	//
	
	CadCanalVendaDAO canalVendaDAO = new CadCanalVendaDAO();
	
	if (canalVendaDAO.alterar(canalVendaForm)){ 
		//executaAlteracao(mapping, form, request, response);
		return mapping.findForward("success");					
	}
	else{
		return mapping.findForward("failure");
	}
}

Esse comparação que vc escreveu, já fiz, mas infelizmente não adiantou.
Acho q com esse código vc poderá me ajudar melhor.

Mais uma vez obrigado.

L
CadCanalVendaVO canalVendaVO = new CadCanalVendaVO();
System.out.println("CadCanalVendaAction - valor getValidado: " + canalVendaForm.getValidado());

String validado = request.getParameter("nomeCheckBox");
if (validado == null){
   canalVendaVO.setValidado(0);
}else{
   canalVendaVO.setValidado(1);
}

Tenta assim

V

Infelizmente não funcionou.
Estou enviando o resultado do meu log, não sei se vai ajudar muito.

CadCanalVendaAction: antes de listar
Entrou CadCanalVendaDAO
AbandonedObjectPool is used (org.apache.tomcat.dbcp.dbcp.AbandonedObjectPool@c743eb)
LogAbandoned: false
RemoveAbandoned: true
RemoveAbandonedTimeout: 5
Antes da query
antes do while
depois do while
antes de fechar conexao.
depois de fechar conexao.
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaForm naoUsarNoRAA: 0
CadCanalVendaForm naoUsarNoRAA: 0
CadCanalVendaForm naoUsarNoRAA: 1
CadCanalVendaAction: depois de listar
CadCanalVendaAction: listaCadCanalVenda = false
CadCanalVendaAction - valor getValidado: null
executaAlteracao canalVendaForm.naoUsarNoRAA: null
CadCanalVendaDAO: Entrou CadCanalVendaDAO alterar.
null
2008-02-25
CadCanalVendaDAO: Antes da conexao.
CadCanalVendaDAO-codigo: 8
CadCanalVendaDAO-canalVenda: A. A. Compra e Venda
CadCanalVendaDAO-naoUsarNoRAATexto: null
CadCanalVendaDAO-naoUsarNoRAA: null
Exception: java.lang.NullPointerException
CadCanalVendaDAO: Fechando conexão.

Antes de chegar nessa linha “CadCanalVendaAction: depois de listar”, todos os valores estão preenchidos, mas logo depois disso, esta vindo tudo preenchido com “null”. Realmente não sei mais o q fazer. rs

Vamos ver se conseguimos agora com esse log postado.

Mais uma vez agradeço.

L

Cara acho q eu comi barriga,
lah no if troca o troca o canalVendaVO.setValidado() por canalVendaForm.setValidado()

V

Funcionou!!!
Nem acredito.
Léo, muito obrigado mesmo. Parece q tirei um peso das costas.
Estou começando com Java agora e já estou trabalhando com Struts, mas vou chegar lá.

Muito Obrigado.

Abs,
Vitor

Criado 25 de fevereiro de 2008
Ultima resposta 25 de fev. de 2008
Respostas 8
Participantes 2