2 Duvidas em JSPxServlet

4 respostas
G

Meninos estou com as seguintes dificuldades em JSPxServlet

No meu JSP eu preciso que o usuário digite o MES/ANO para atualizar um arquivo. O meu JSP tem a máscara 99/9999.

Eu capturo esta variável no meu Servlet da seguinte maneira :

String mesano = request.getParameter("mesAno");
		String strMes = mesano.substring(0,2);
		String strAno = mesano.substring(3,7);
		if ((!util.confereMesAno(strMes,strAno))){
			request.setAttribute("msgRequest","Mês/Ano Inválido !");

E testo da seguinte maneira :

public boolean confereMesAno(String mes,String ano) {
		boolean retorno = true;
		boolean isMes = mes.matches("-?[0-9]+.?[0-9]*");
		boolean isAno = ano.matches("-?[0-9]+.?[0-9]*");
		if (!isMes){
			retorno = false;
		}else if (!isAno){
			retorno = false;
		}else if (Integer.parseInt(mes)< 01 || (Integer.parseInt(mes)> 12)){
			retorno = false;
		}else if (Integer.parseInt(ano)< 1999 || (Integer.parseInt(ano)> 2030)){
			retorno = false;
		}
		return retorno;
	}

Só que o usuario pode digitar lá no campo : 02/2 ou 03/20

Ae a substring está dando erro de Exception.

E não sei como “barrar” isso !!!

Outra dificuldade é se o meu método confereMesAno está certo e é boa prática fazer isso !

Muito obrigada

Giuliana

4 Respostas

Giulliano

giuliana eu não entendi esse lance de o usuário pode digitar 02/20 …que ano seria esse ???

é tudo uma questão de lógica e algoritimos, uma primeira opção seria vc disponibilizar um calendário em javascript na tela para seu usuário não ficar digitando. Existem milhões de exemplos prontos. Se isso não te agrada crie uma função que valide o mês entre 1 e 12 e ano entre 1970 e 2099.
Mesmo pq até 2099 esse sistema já deve ter morrido. E mais algusn cálculos…comece a fazer e qq coisa vc posta ele ae…

antoniopopete

Na sua função de validação do JavaScript porque você não diz que é inválido digitar < 7?
Só é válido digitar xx/xxxx
Uma expressão regular que poderia validar isso:

[0-9]{2}/[0-9]{4}

Se não conhece expressões regulares, livro gratuito:

E em relação a validação que perguntou, se você garantir com uma expressão regular que o cara só consegue digitar números, e o primeiro tem exatamente 2 e o segundo exatamente 4.
Seu método de validação pode ser assim:

String[] tokens = request.getParameter("mesAno").split("/"); //acho que tem que usar caracter de escape para /  

Integer mes = Integer.parseInt(tokens[0]);
Integer ano = Integer.parseInt(tokens[1]);

if (mes < 1 || mes > 12)){  
         return  false; 
}
if (mes < 1999 || mes > 2030)){  
         return  false; 
}
return true;

Acho que você não pode comparar 1 como 01, porque se não estou enganado isso é notação de número octal,
acho que nesse caso não interfere no resultado, mas em outras situações isso pode atrapalhar sua lógica…

Mas lembre-se, você só poderá usar assim se existir um método no seu javascript que garanta a expressão regular anterior ao código.
E outra coisa, eu faria validação no javascript e também na tela (nunca se sabe a real intenção do usuário).

G

Olha, gostei do Split !!!

No lugar do substring, acho uma melhor solução !

Giuliano é o seguinte : o usuário pode digitar errado 02/20 ou 02/0002 ou 89/8990 ou 05/0303
e pode digitar certo : 12/2008 ou 04/1999 entendeu ?

Estou falando que o usuario pode digitar qq numero e ficar sem digitar caracteres tipo no 1º exemplo ele digitou o mês certo (02) porém digitou o ano com apenas 2 digitos (20) e o MesAno ficou 02/20

Agora num sabia sobre expressoes regulares em JS !

Vou dar uma olhada nesta apostila

Muito obrigada mesmo

Giuliana

antoniopopete

Acredito que a maioria das linguagens tem suporte a ER.
Principalmente as que são de scripts.ehuehuehe
Entendeu como liimtar os caracteres?ER.
Validação dessas coisas, ER faz muita coisa útil.

Criado 17 de abril de 2008
Ultima resposta 17 de abr. de 2008
Respostas 4
Participantes 3