Problemas com JavaScript - Struts (NÃO RESOLVIDO) Ajudem please!

25 respostas
J

[size=9][/size]Tenho uma função javascript e um form struts, não consigo acessar o document.usuario. Como posso acessar as propriedades do form, por exemplo:

<html:text property=“username” name=“usuario” />

Não consigo fazer document.username…

Como acessar a propriedade document.form.username ?

Por favor ajudem !!!

25 Respostas

thiago.correa

E numca vai conseguir, se este campo estiver dentro de um form. Você pode fazer de duas maneiras, primeiro coloque a propriedade ‘id’ no seu field ( <html:text property=“username” name=“usuario” id=“usuario”/> ) depois pegue o objeto desta maneira

document.forms[0].usuario;
//ou
document.getElementById("usuario");
J

Quando processo dá erro no onSubmit no form, send;

JSPG0227E: Exceção capturada durante a conversão /login.jsp: /login.jsp(78,1) --&gt JSPG0123E: Impossível localizar as informações sobre o atributo de marcação onSubmit.

<html:form action="/login" method=“post” onSubmit=“return Form_Validator(form);”>

J

JSPG0227E: Exceção capturada durante a conversão /login.jsp: /login.jsp(168,14) --&gt JSPG0123E: Impossível localizar as informações sobre o atributo de marcação id.

A marcação "id", dá erro…

digaoalves

Olá veja se da forma abaixo irá funcionar:

<html:form action="/login" method="post" onsubmit="return Form_Validator(form);">

Ps.: onsubmit e não onSubmit

[]´s
Rodrigo

J

Opa, foi mas apareçeu outro erro:

Código de Erro HTTP: 500

Mensagem de Erro:JSPG0227E: Exceção capturada durante a conversão /login.jsp: /login.jsp(168,14) --&gt JSPG0123E: Impossível localizar as informações sobre o atributo de marcação id.

Por favor ajudem !!!

marciobarroso

Certifique-se que o javascript gerado pelo validator está sendo renderizado no html.

Posta o seu code prá gente ter mais detalhe

J

Está correto meu submit ?

<td><html:submit name=“submitgif” styleClass=“botao_entrar_n”

onclick=“return Form_Validator(form);”>

</html:submit>
J

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix=“html”%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix=“bean”%>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix=“logic”%>

<tr>
						<td align="center" width="370">
						<table width="100%" border="0" cellspacing="0" cellpadding="0">
							<tr>
								<td align="left" valign="top" width="170">
								<table border="0" cellspacing="4" cellpadding="4" height="100%"
									width="100%">
									<tr>
										<td class="titulo_user_senha" align="left">&nbsp;Usuário:</td>
									</tr>
									<tr>
										<td align="left">	
													<html:text property="username"	name="usuario" id="usuario" size="8" maxlength="8"
													styleClass="campo_site_senha">
												</html:text>
										</td>
									</tr>
									<tr>
										<td class="titulo_user_senha" align="left">&nbsp;Senha:</td>
									</tr>
									<tr>
										<td align="left">
											<html:password property="senha" name="senha" id="senha" size="8" maxlength="8"
												styleClass="campo_site_senha" redisplay="no">
											</html:password>
										</td>
									</tr>
									<tr>
										<td><html:submit name="submitgif" border="0" styleClass="botao_entrar_n" onMouseOver="this.className='botao_entrar_a'"
												onMouseOut="this.className='botao_entrar_n'" onclick="return Form_Validator(form);">		
											</html:submit>
										</td>
									</tr>
								</table>
								</td>
								<td align="left" valign="top" width="200"></td>
							</tr>
						</table>
						</td>
					</tr>
				</table>
				</td>
			</tr>
marciobarroso

Cara … Dando uma organizada no seu código eu pude encontrar um monte de problemas.
Os códigos de javascript eu dei uma arrumada …

Erros encontrados :

1 - vc tem 3 tags <body> neste código;

2 - Se vc coloca onsubmit no form, não precisa colocar a chamada da função no onclick do submit;

3 - Nos html:text e html:password vc precisa usar o parametro property com o mesmo nome do atributo do seu actionForm;

4 - Nos html:text e html:password vc  deve usar o name caso esteja associando este campo a algum objeto de escopo;

5 - Nos html:text e html:password vc usou o parametro id. Este parametro não existe. Para identificar estes campos por id vc deve usar o parametro styleId;

6 - No html:submit :

- O parametro border não existe;

- O parametro onMouseOver deve ser onmouseover;

- O parametro onMouseOut deve ser onmouseout;

7 - Faltou fechar a tag <html:form>;

Tenho certeza que acertando estes problemas irá funcionar.

&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"	prefix="bean"%&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%&gt;
&lt;%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic"%&gt;
&lt;HTML&gt;
&lt;HEAD&gt;
	&lt;META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"&gt;
	&lt;META name="GENERATOR" content="IBM Software Development Platform"&gt;
	&lt;META http-equiv="Content-Style-Type" content="text/css"&gt;
	&lt;LINK href="theme/Menus.css" rel="stylesheet" type="text/css"&gt;
	&lt;TITLE&gt;title&lt;/TITLE&gt;
	&lt;script type="text/javascript" language="javascript"&gt;
		/* Retorna um objeto do form pelo id */
		function $(id) {
			return document.getElementById(id);
		}
		
		function carrega() {
			$('usuario').focus();
		}
		
		function Form_Validator(theForm) {
			$('usuario').value = $('usuario').value.toUpperCase();
			$('senha').value = $('senha').value.toUpperCase();
		
			if ($('usuario').value.length &lt6) {
				alert("O campo usuário deve ter entre 6 e 8 caracteres. Favor corrigir.");
				$('usuario').value='';
				$('usuario').focus();
				return (false);
			}
			if ($('usuario').value != "") {
				var len = $('usuario').value.length-1;
				var regex = /^[a-zA-Z0-9]$/;
				
				for (var i=0; i&lt;len ; i++) {
					var character = $('usuario').value.substr(i,i+1);
					if ( !regex.test(character) ) {
						alert("Utilize apenas letras e números para o usuário. Favor corrigir.");
						$('usuario').value = '';
						$('usuario').focus();
						return (false);
					}
				}
			}
			if ($('senha').value != "") {
				var len = $('senha').value.length-1;
				var regex = /^[a-zA-Z0-9]$/;
			
				for (var i=0 ; i&gt;&lt;len ; i++) {
					var character = $('senha').value.substr(i,i+1);
					if ( !regex.test(character) ) {
						alert("Utilize apenas letras e números para a senha. Favor corrigir.");
						$('senha').value='';
						$('senha').focus();
						return (false);
					}
				}
			}
			if ( $('senha').value.length &gt;&lt 5 ) {
				alert("O campo senha deve ter entre 5 e 8 caracteres.");
				$('senha').value='';
				$('senha').focus();
				return (false);
			}
			
			$('submitgif').disabled = 'true';
			document.forms[0].submit();
		}
	&lt;/script&gt;
&lt;/HEAD&gt;
	&lt;BODY bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="carrega();"&gt;
		&lt;html:form action="/login" method="post" onsubmit="Form_Validator(form);"&gt;
			&lt;table&gt;
				&lt;tr&gt;
					&lt;td align="center" width="370"&gt;
						&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt;
							&lt;tr&gt;
								&lt;td align="left" valign="top" width="170"&gt;
									&lt;table border="0" cellspacing="4" cellpadding="4" height="100%" width="100%"&gt;
										&lt;tr&gt;
											&lt;td class="titulo_user_senha" align="left"&gt;
												Usuário:
											&lt;/td&gt;
										&lt;/tr&gt;
										&lt;tr&gt;
											&lt;td align="left"&gt;
												&lt;html:text property="username" name="usuario" id="usuario" size="8" maxlength="8" styleClass="campo_site_senha" /&gt;
											&lt;/td&gt;
										&lt;/tr&gt;
										&lt;tr&gt;
											&lt;td class="titulo_user_senha" align="left"&gt;
												Senha:
											&lt;/td&gt;
										&lt;/tr&gt;
										&lt;tr&gt;
											&lt;td align="left"&gt;
												&lt;html:password property="senha" name="senha" id="senha" size="8" maxlength="8" styleClass="campo_site_senha" /&gt;
											&lt;/td&gt;
										&lt;/tr&gt;
										&lt;tr&gt;
											&lt;td&gt;
												&lt;html:submit name="submitgif" styleClass="botao_entrar_n" onMouseOver="this.className='botao_entrar_a'" onMouseOut="this.className='botao_entrar_n'" /&gt;
											&lt;/td&gt;
										&lt;/tr&gt;
									&lt;/table&gt;
								&lt;/td&gt;
								&lt;td align="left" valign="top" width="200"&gt;
								&lt;/td&gt;
							&lt;/tr&gt;
						&lt;/table&gt;
					&lt;/td&gt;
				&lt;/tr&gt;
			&lt;/table&gt;
		&lt;/html:form&gt;
	&lt;/BODY&gt;
&lt;/HTML&gt;

[]'s

J

Marcio, antecipadamente agradeço a sua atenção, mas ainda continuo com erro;

erro linha 51 - sintaxe
erro linha 74 - Objerto inesperado

Oque mais posso fazer ?

J

Marcio

Segue a linha que é informado com erro na sintaxe:

for (var i=0 ; i&gt<len ; i++) {>

J

jonimca:
Marcio

Segue a linha que é informado com erro na sintaxe:

for (var i=0 ; i&gt<len ; i++) {>

Que sinal é esse? &gt&lt ??

Não seria i<len, ou seja, i menor que len?

J

Juliano, sim vc tem razão, já acertei

Agora o erro pula pra essa linha, veja:

if ( $(‘senha’).value.length &gt&lt 5 ) {

marciobarroso

julianostr:
jonimca:
Marcio

Segue a linha que é informado com erro na sintaxe:

for (var i=0 ; i&gt<len ; i++) {>

Que sinal é esse? &gt&lt ??

Não seria i<len, ou seja, i menor que len?


Isso mesmo … i menor que len …

no copy e paste acabei errando aí …

[]'s

J

jonimca:
Juliano, sim vc tem razão, já acertei

Agora o erro pula pra essa linha, veja:

if ( $(‘senha’).value.length &gt&lt 5 ) {

Q? Cuma? Quando?

Agora é mais difícil saber o que você quer com &gt&lt, pode ser

if ( $('senha').value.length &gt 5 ) { -&gt Maior que

if ( $('senha').value.length &lt 5 ) { -&gt Menor que

ou até 

if ( $('senha').value.length != 5 ) { -&gt Diferente de

Veja aí qual você precisa…

J

Rapaziada, ainda com erro;

function carrega() {

$(usuario).focus();

}

Diz que está ó valor é null ou não é um objeto

Nessa linha tbm

<body bgcolor="#FFFFFF" leftmargin=“0” topmargin=“0” marginwidth=“0” marginheight=“0” onLoad=“carrega();”>

J

Vc´s conhecem outro jeito para que eu possa validar os campos do usuário ?

marciobarroso

Cara … posta de novo o code do jsp renderizado para ver como ficou …

[]'s

marciobarroso
<blockquote><div class="quote-author">jonimca:</div> function carrega() {

$(‘usuario’).focus();

} </blockquote>

Troque o ‘id’ da tag html:text para styleId conforme abaixo :

&lt;html:text property="username" name="usuario" styleId="usuario" size="8" maxlength="8" styleClass="campo_site_senha" /&gt;

[]'s

nbluis

Pelo jeito tu não consegue colocar um id no atributo
Você pode fazer um laço para chegar ao seu objeto.

var objetcs = document.getElementsByTagName('input');
var myobjetc;
for(var i=0; i&lt;objetcs.length; i++){
  if(objetcs[i].name != null && objetcs[i].name == 'senha'){
    myobjetc = objetcs[i];
    break;
  }
  /*aqui tu tem a variavel myobject, dai tu testa ela.....*/  
}

Acho que era isso… talvex tenha falado bobagem…>

J

Tente assim:

function carrega() {
   eval($('usuario')+".focus()");
}

Nesse caso $(‘usuario’) deverá ter um conteúdo:

Caso $(‘usuario’) contenha somente o “usuario”, então você terá que deixar mais partes fixas no javascript. Exemplo:

function carrega() {
   eval("document.forms[0]." + $('usuario') + ".focus()");
}
marciobarroso

Galera … tantas solucões mirabolantes, qdo simplesmente colocar o styleId no html:text do campo usuário resolveria o problema.

[]'s

J

marciobarroso:
Galera … tantas solucões mirabolantes, qdo simplesmente colocar o styleId no html:text do campo usuário resolveria o problema.

[]'s

Mas você entendeu o que ele quer na realidade? Ou sou eu que estou viajando?

Pelo que entendi ele quer acessar um campo do form utilizando $(‘usuario’) que será substituído em tempo de execução, não ?

Me corrija caso eu esteja errado…

marciobarroso

A função $(‘usuario’) retorna um objeto do form :

function $(id) {
     return document.getElementById(id);
}

Só que para este método funcionar, vc precisa colocar o id no seu campo de texto. Usando a taglib html do struts, para colocar o id, vc deve adicionar o parametro “styleId”.

&lt;html:text property="usuario" styleId="usuario" /&gt;
// depois de renderizado vai gerar :
&lt;input type="text" name="usuario" id="usuario"&gt;

É bem simples.

[]'s

marciobarroso

julianostr:
marciobarroso:
Galera … tantas solucões mirabolantes, qdo simplesmente colocar o styleId no html:text do campo usuário resolveria o problema.

[]'s

Mas você entendeu o que ele quer na realidade? Ou sou eu que estou viajando?

Pelo que entendi ele quer acessar um campo do form utilizando $(‘usuario’) que será substituído em tempo de execução, não ?

Me corrija caso eu esteja errado…

Não confunda esta função com EL … Não tem nada que será gerado em tempo de execução … como na minha resposta anterior, isto é a chamada para uma função javascript que retorna o objeto do form identificado pelo id passado.

[]'s

Criado 30 de janeiro de 2007
Ultima resposta 28 de fev. de 2007
Respostas 25
Participantes 6