[Resolvido]Problemas com <c:forEach>

6 respostas
Chileno

E ai galera tudo bem??

Entao to tentando resolver o seguinte problema. Tenho uma lista de registros que preciso mostrar na tela, cada linha representa algumas informações de usuarios que poderão ser modificadas na mesma tela. Para popular a lista de usuarios dependendo dos parametros de busca eu utilizo JSTL crio um contador para que cada registro seja um form diferente e depois eu possa modificar o mesmo na propria tela. Porem nao esta funcionando.
De primeira os resgistros vem bloqueados, ai tem um botao do tipo radio que libera o registro pra modificação ai é só modificar e clicar no botao submit.

Só que nao esta funcionando! :frowning: será que alguem pode me ajudar?

<script type="text/javascript">
function desbloquear(n){	
	alert("teste");		
	document.n.nomeUp.disabled=false;
	document.n.hierarquiaUp.disabled=false;
	document.n.enderecoUp.disabled=false;
	document.n.telUp.disabled=false;
	document.n.celUp.disabled=false;
	document.n.emailUp.disabled=false;
	document.n.datUp.disabled=false;							
}			
</script>
<c:forEach var="user" items="${lista}" varStatus="status">
  <html:form action="/updateUsuario"  styleId="${status.count}">
    <tr>
      <td><div align="left"><input type="text" value="${user.cod_usuario}" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.nome}" id="nomeUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.hierarquia}" id="hierarquiaUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.endereco}" id="enderecoUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.telefone_res}" id="telUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.telefone_cel}" id="celUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${user.email}" id="emailUp" disabled="disabled"></div></td>
      <td><div align="left"><input type="text" value="${status.count}" id="datUp" disabled="disabled"></div></td>
      <td><input type="radio" name="tipo" onclick="desbloquear(${status.count})"></input></td>
      <td><input type="submit" value="Alterar" onclick="CampoBranco()"></input></td>
    </tr>
  </html:form>			
</c:forEach>

Desde já obrigado

6 Respostas

CarvalR2

Permita-me saber:

  • O jsp compila certo? não há exceção no servidor?
  • O html exibe certo?
  • O botao desbloqueio funciona bem?
  • O botao submit é que está com erro?

E há alguma mensagem de erro , alguma exceção … ? em qual ação do usuário ou do sistema aparece o erro?

Chileno

Entao … o JSP compila que é uma blz. O que nao esta funcionando direito ai de primeira é o radio.
Pelo que eu sei a idéia de um radio é assim

<input type="radio" name="tipo"/>

Se ele esta dentro de um loop ele vai acabar criando varios radios que supostamente deveriam ser do mesmo grupo. O primeiro erro é esse. Porque todos os radios ficam selecionaveis.
Sobre o desbloqueio:

alert("teste");

Foi inserido pra ver se ele caia na função o que esta ocorrendo. Porem ele nao esta fazendo o resto do código que desabilitaria o disabled deixando modificar pra poder seguir o proximo passo que é submeter o form.
Nao sei se ficou claro os problemas … mas de qq maneira muito obrigado pela força

CarvalR2

Então, os radios não vão ficar no mesmo grupo pois estão em forms diferentes.

Isso (aqui sao independentes):

É diferente disso (aqui cria grupo):

Quanto ao document.n.nomeUp.disabled=false;
funcona assim? nao teria que ser: document.forms[n].nomeUp.disabled=false;

Chileno

Poxa legal cara … vc tem razao …eles vao acabar entrando em forms diferentes. Agora preciso de um jeito de colocar eles em um mesmo grupo

Referente ao

document.n.nomeUp.disabled=false;

Este nao esta funcionando tb … tentei de duas maneiras mais ou menos parecido do jeito que vc me falou

function desbloquear(n){
	alert("teste");
	for(var i=0; i <= n;i++){
		document.n[i].nomeUp.disabled=false;
		...o resto igual ....	
		}								
}

e

function desbloquear(n){
	alert("teste");
	for(var i=0; i <= n;i++){
		document.i.nomeUp.disabled=false;
                                .... o resto igual ....		
		}								
	}

Das duas maneiras tb nao funcionou … :frowning:

Alguma dica do que posso estar fazendo de errado??

CarvalR2

Eu entendi que você está querendo trabalhar com vários forms, é isso mesmo?

Pois o objeto ‘document’ possui o atributo ‘forms’, que é um array. Então para acessar o form que você quer, basta chamar o form passando o indice:

document.forms[n].nomeUp.disabled = false;

Onde n é o índice do form que você está querendo. E forms é realmente o atributo. Este é o nome do atributo.

Porém eu sempre trabalhei apenas com 1 form. Ainda não tive a necessidade de utilizar vários, como você está fazendo. Por isso lhe pergunto se você quer mesmo utilizar vários forms.

Sempre que quero acessar um campo do form, utilizo esta nomenclatura:

document.forms[0].campo…

Pois como sempre utilizo apenas 1 form, ele sempre será o índice zero, do array de forms da página.

Chileno

E ai cara … obrigado pela força!!!

Com as suas dicas eu já consegui resolver 50% dos problemas

Olha o codigo que eu fiz com as dicas que vc me deu

JS

function desbloquear(n){	
		document.getElementById("nome"+n).disabled=false;
		document.getElementById("hierarquia"+n).disabled=false;
		document.getElementById("endereco"+n).disabled=false;
		document.getElementById("tel"+n).disabled=false;
		document.getElementById("cel"+n).disabled=false;
		document.getElementById("email"+n).disabled=false;
		document.getElementById("dat"+n).disabled=false;
		for(var i=1; document.getElementById("cod"+i) != null; i++){
			if(i != n){
				document.getElementById("nome"+i).disabled="disabled";
				document.getElementById("hierarquia"+i).disabled="disabled";
				document.getElementById("endereco"+i).disabled="disabled";
				document.getElementById("tel"+i).disabled="disabled";
				document.getElementById("cel"+i).disabled="disabled";
				document.getElementById("email"+i).disabled="disabled";
				document.getElementById("dat"+i).disabled="disabled";				
			}
		}		
	}
<html:form action="/updateUsuario"  styleId="form1">		
			<c:forEach var="user" items="${lista}" varStatus="status">			
			<tr>
				<td><div align="left"><input type="text" value="${user.cod_usuario}" id="cod${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.nome}" id="nome${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.hierarquia}" id="hierarquia${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.endereco}" id="endereco${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.telefone_res}" id="tel${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.telefone_cel}" id="cel${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="${user.email}" id="email${status.count}" disabled="disabled"></div></td>
				<td><div align="left"><input type="text" value="teste${user.dat_cadastro}" id="dat${status.count}" disabled="disabled"></div></td>
				<td><input type="radio" name="tipo" onclick="desbloquear(${status.count})"></input></td>
				<td><input type="submit" value="Alterar" onclick="CampoBranco()"></input></td>
			</tr>						
		</c:forEach>
		</html:form>

Com isso ele esta reunindo os radios em um grupo só e abilitando os campos pra alteração 1 por vez. O unico problema agora é o botão submit que esta enviando todos os dados do formulario e no meu action ele nao ta conseguindo ser resolvido.

Será que tem uma maneira de amarrar o meu botao submit unicamente a 1 linha? a Linha que esta sendo alterada … ou ao radio que esta sendo usado sei lá??

Abs

Criado 27 de maio de 2010
Ultima resposta 28 de mai. de 2010
Respostas 6
Participantes 2