Desabilitar campos checkboxlist struts 2 com javascript

13 respostas
rodrigo.bossini

Pessoal,

Gostaria de saber como faço para desabilitar cada caixinha de uma checkboxlist no struts 2, usando javascript.

A principio eu tinha um radio e precisei trocar por checkbox.

O radio eu conseguia desativar da seguinte forma:

Se o nome do radio eh rad, para cada opçao do radio é dado um nome, com um inteiro concatenado ao nome original.

Assim, um radio com 3 opções, teria suas opções com os seguintes nome: rad1, rad2 e rad3.

Tentei fazer o mesmo para desabilitar as opções do checkboxlist mas não funcionou. O comando para desabilitar foi simplesmente ignorado.

Alguém já passou por isso?

Valeu!

13 Respostas

jyoshiriro

Amigo, não se esqueça da limitação das versões 2.1.x do struts, nas quais é IMPOSSÍVEL usar javascript em JSP que tenha alguma tag DOJO (<sx…).

Quando a solução, sugiro o uso de Jquery que é bem fácil.

rodrigo.bossini

jyoshiriro:
Amigo, não se esqueça da limitação das versões 2.1.x do struts, nas quais é IMPOSSÍVEL usar javascript em JSP que tenha alguma tag DOJO (<sx…).

Quando a solução, sugiro o uso de Jquery que é bem fácil.

Realmente não sabia dessa limitação. De fato, até então estou usando javascript numa JSP que tem a tag sx:tabbedpanel sem problemas…
O que implica essa limitação que vc mencionou?

rodrigo.bossini

Alguém com alguma resposta interessante?

jyoshiriro

Tem certeza que está usando javascript nessa página sem problemas?

Faça um teste simples:

Use

Dai em qualquer elemento coloque o “onclick” para chamar esta função. Então veja o resultado (não vai acontecer nada).

Quanto a sua solução, não se esqueça que em checkbox os nomes de todos os campos devem ser os mesmos, ou seja, todos os ckeckbox devem ter a propriedade “name” igual (a não ser que realmente sejam um para cada campo diferente).

rodrigo.bossini

jyoshiriro:
Tem certeza que está usando javascript nessa página sem problemas?

Faça um teste simples:

Use

Dai em qualquer elemento coloque o “onclick” para chamar esta função. Então veja o resultado (não vai acontecer nada).

Quanto a sua solução, não se esqueça que em checkbox os nomes de todos os campos devem ser os mesmos, ou seja, todos os ckeckbox devem ter a propriedade “name” igual (a não ser que realmente sejam um para cada campo diferente).

Sim, tenho certeza. E é exatamente assim que você mencionou que estou usando. Conforme o usuário seleciona alguma opção de um radio, uma função javascript habilita ou desabilita determinados campos. E tudo isso dentro de um <sx:tabbedpane.

Não estou usando um checkbox “puro”. Estou usando um <s:checkboxlist, que tem a propriedade list, que cria um checkbox pra cada elemento da lista. Não é necessário se preocupar com a propriedade name de cada atributo. Mais alguma ideia?

OBS: Essa limitação aí está documentada em algum lugar?

jyoshiriro

Se puder postar o código que está usando posso ver o que está havendo.

PS: gostaria de saber como você fez para funcionar o javscript com DOJO, pois comigo o dojo simplesmente descarta do javascript do JSP mesmo se eu usar os benditos atributos “executeScript=‘true’” e “separateScripts=‘true ou false’”. E todos os meus amigos que usam o DOJO plugin têm esse mesmo problema.

jyoshiriro

Ah… essa limitação está até do site de ISSUES do Struts2, mas não lembro em qual parte.

jyoshiriro

Lembrei de quando ocorre isso:

Se você faz uma chamada a um JSP com DOJO Plugin e javascript, tudo roda normal, mas se usar um <sx:a para um div com chamada ajax, este JSP carregado terá todos os seus javascripts descartados se lá houver tags DOJO. Repito que isso ocorre mesmo com aqueles atributos de “executeScripts” e “separateSripts” com valores corretos.

rodrigo.bossini
jyoshiriro:
Se puder postar o código que está usando posso ver o que está havendo.

PS: gostaria de saber como você fez para funcionar o javscript com DOJO, pois comigo o dojo simplesmente descarta do javascript do JSP mesmo se eu usar os benditos atributos "executeScript='true'" e "separateScripts='true ou false'". E todos os meus amigos que usam o DOJO plugin têm esse mesmo problema.

Criei uma página de teste mais simples só mostrar como fiz:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<sx:head/>
<title>Insert title here</title>
</head>
<body>

<sx:tabbedpanel id="panel">
		<s:actionerror/>
		<s:actionmessage/>
			<s:form action="formulario-cadastral">
				
				<sx:div id="tabCadastro" label="Cadastro">
				
				<s:radio  label="NovoFax" onclick="teste(this)" list="#{'1':'Sim','0':'Não'}" name="bla" value="1" required="true"/>
				<s:textfield  id="nf1" label="Plano Contratado" name="blablabla" required="true"></s:textfield>
				<s:textfield id="nf2" label="Valor de Processamento" name="nome" required="true"></s:textfield>
				</sx:div>
			</s:form>
</sx:tabbedpanel>

</body>

<script type="text/javascript" language="Javascript">
function teste(Ob){
	if (Ob.value == 1){		
		Ob.form.nf1.disabled = false;
		Ob.form.nf2.disabled = false;
	}
	else{		
		Ob.form.nf1.disabled = true;
		Ob.form.nf2.disabled = true;
	}
}

</script>

</html>
rodrigo.bossini

Voltando ao assunto original, alguma sugestão de como desabilitar um checkboxlist do struts 2 usando javascript?

jyoshiriro

Amigo,

Primeiro substitui <s:radio por <s:checkboxlist e “funcionou”.
A questão é saber o que você quer que aconteça…
Você quer que desavilite os controles quando se faz o quê? Quando clica em quaquer item? em algum específico?

rodrigo.bossini

jyoshiriro:
Amigo,

Primeiro substitui <s:radio por <s:checkboxlist e “funcionou”.
A questão é saber o que você quer que aconteça…
Você quer que desavilite os controles quando se faz o quê? Quando clica em quaquer item? em algum específico?

Pois é. Eu estava utilizando radio antes, e também funcionava, mas precisei trocar pra checkbox pra atender a uma regra de negócio.

O problema parece estar mesmo com essa (maldita) checkboxlist.

É assim:

Eu tenho um radio, onde o usuário pode escolher sim ou não.

Caso escolha sim, alguns campos devem ser habilitados, dentre eles esse checkboxlist.

Caso escolha não, esses mesmos campos devem ser desabilitados.

Então o problema é esse, desabilitar ou habilitar os “quadradinhos” de uma checkboxlist dependendo de qual opção o usuário selecionar num radio.

rodrigo.bossini

jyoshiriro:
Amigo,

Primeiro substitui <s:radio por <s:checkboxlist e “funcionou”.
A questão é saber o que você quer que aconteça…
Você quer que desavilite os controles quando se faz o quê? Quando clica em quaquer item? em algum específico?

nada mais a dizer?

Criado 25 de novembro de 2009
Ultima resposta 30 de nov. de 2009
Respostas 13
Participantes 2