Tratamento de ERRO em JSP

14 respostas
L

Olá a todos!
Tenho dúvidas de como tratar um erro:
“Se o cara inserir uma string ao invés de int, retornará uma exception”

Como eu trato esta exception?"
No campo quantidade deve inserir um inteiro.

Segue o código:
página.JSP

<H1>Pedido de Compra</H1><br>
Código do produto: <%= codigo %><BR>
Descrição do produto: <%= descricao %><br>
Valor: <%= valor %>
<form method="post" action="TrataErro.jsp">
Quantidade: <INPUT type="text" name="quantidade" size="5"> unidades
<INPUT type="submit" name="codigo" value="<%= codigo %>">
</form> 
<FORM action="Lista.jsp">
	<INPUT type="submit" name="naocompra" value="Desistir">
</FORM>

Quero tratar o erro em outra página.jsp, divulgando o erro, com a seguinte frase: “Digite um número no campo quantidade”

Grato

14 Respostas

Marlon_Meneses
Vc pode tentar fazer assim:

Na pagina Tratamento.jsp ficaria assim

try{

Integer.parseInt(request.getParameter(“valor”));

//aqui ficam as operacoes necessarias

}catch(Exception e){

out.print(“Somente valor numerico”);

}
Pedrosa

Você pode colocar uma função javascript que impessa que usuário digite algo não númérico nesse campo.

fsquadro

Eu concordo com o Pedrosa,

Faça com o JavaScript, fica melhor.

L

Correto, obrigado pessoal.
Mas como colocarei Javascript?

Marlon_Meneses

no Dreamweaver tem um modulo d validacao d formulario em javascript!
vc usa ele?

L

Tenho mais conhecimento de Código java, com pouco conhecimento ou nenhum em javascript.
Grato

L

não

thokk
//valida o cpf do cara isso se vc precisar
function validarCPF(){
   var cpf = document.frmCheques.CpClient.value;
   var filtro = /^\d{3}.\d{3}.\d{3}-\d{2}$/i;
   var valid
   valid = document.frmCheques.CpClient;
   if(!filtro.test(cpf)){
     window.alert("CPF inválido. Tente novamente.");
	valid.focus();
     document.frmCheques.CpClient.value="";
	 return false;
	 
   }
   
   cpf = remove(cpf, ".");
   cpf = remove(cpf, "-");
    
   if(cpf.length != 11 || cpf == "[telefone removido]" || cpf == "[telefone removido]" ||
	  cpf == "[telefone removido]" || cpf == "[telefone removido]" || cpf == "[telefone removido]" ||
	  cpf == "[telefone removido]" || cpf == "[telefone removido]" || cpf == "[telefone removido]" ||
	  cpf == "[telefone removido]" || cpf == "[telefone removido]"){
	  window.alert("CPF inválido. Tente novamente.");
	  valid.focus();
     document.frmCheques.CpClient.value="";
	  return false;
   }

   soma = 0;
   for(i = 0; i < 9; i++)
   	 soma += parseInt(cpf.charAt(i)) * (10 - i);
   resto = 11 - (soma % 11);
   if(resto == 10 || resto == 11)
	 resto = 0;
   if(resto != parseInt(cpf.charAt(9))){
	 window.alert("CPF inválido. Tente novamente.");
	 valid.focus();
     document.frmCheques.CpClient.value="";
	 return false;
   }
   soma = 0;
   for(i = 0; i < 10; i ++)
	 soma += parseInt(cpf.charAt(i)) * (11 - i);
   resto = 11 - (soma % 11);
   if(resto == 10 || resto == 11)
	 resto = 0;
   if(resto != parseInt(cpf.charAt(10))){
     window.alert("CPF inválido. Tente novamente.");
	 valid.focus();
     document.frmCheques.CpClient.value="";
	 return false;
   }
   return true;
 }
 
 function remove(str, sub) {
   i = str.indexOf(sub);
   r = "";
   if (i == -1) return str;
   r += str.substring(0,i) + remove(str.substring(i + sub.length), sub);
   return r;
 }

//*************************************************

//Valida Cnpj do cara se precisar
function validaCNPJ() {
CNPJ = document.frmCheques.CnClient.value;
var valid
valid = document.frmCheques.CnClient;
erro = new String;
if (CNPJ.length < 18) erro += "É necessarios preencher corretamente o numero do CNPJ! O campo deve conter xx.xxx.xxx/xxxx-xx \n\n";
if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
if (erro.length == 0) erro += "É necessarios preencher corretamente o numero do CNPJ! O campo deve conter xx.xxx.xxx/xxxx-xx \n\n";
valid.focus();
document.frmCheques.CnClient.value="";
}
//substituir os caracteres que nao sao numeros
if(document.layers && parseInt(navigator.appVersion) == 4){
x = CNPJ.substring(0,2);
x += CNPJ.substring(3,6);
x += CNPJ.substring(7,10);
x += CNPJ.substring(11,15);
x += CNPJ.substring(16,18);
CNPJ = x; 
} else {
CNPJ = CNPJ.replace(".","");
CNPJ = CNPJ.replace(".","");
CNPJ = CNPJ.replace("-","");
CNPJ = CNPJ.replace("/","");
}
var nonNumbers = /\D/;
if (nonNumbers.test(CNPJ)) erro += "A verificacao de CNPJ suporta apenas numeros! \n\n"; 
var a = [];
var b = new Number;
var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
for (i=0; i<12; i++){
a[i] = CNPJ.charAt(i);
b += a[i] * c[i+1];
}
if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
b = 0;
for (y=0; y<13; y++) {
b += (a[y] * c[y]); 
}
if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
erro +="Digito verificador com problema!";
valid.focus();
document.frmCheques.CnClient.value="";
}
if (erro.length > 0){
alert(erro);
return false;
} else {
alert("Você acabou de indicar um cnpj válido.");
}
return true;
}


//*************************************************
//Verifica se é numerico
//Ou melhor o que vc digitar esta dentro daquele vetor
function Numeric(sText)
{
  var ValidChars = "[telefone removido]-/";
  //lembrando ValidChars = "[telefone removido]-/"; este é meu vetor
  //é o -/ é o que estou valindo e que pode ser usado
  //se não quiser é só vc tirar e colocar assim
  //ValidChars = "[telefone removido]";
  var IsNumber=true;
  var Char;
  var tes
  var sText = document.frmCheques.Agencia.value;
  tes = document.frmCheques.Agencia;
  for (i = 0; i < sText.length && IsNumber == true; i++) 
     { 
     Char = sText.charAt(i); 
     if (ValidChars.indexOf(Char) == -1) 
        {
        IsNumber = false;
		alert("O campo AGENCIA tem que ser númerico."+ "" + "--"+sText+"--" + "" +"é inválido.");
		tes.focus();
		document.frmCheques.Agencia.value="";
        }
     }
  return IsNumber; 
  }

Espero que possa te ajudar.
Já estava me esquecendo que no campo vc vai chamar o javascript assim: onBlur=“javascript:Numeric()”

Falou

Bravox
luclucsam:
Mas como colocarei Javascript?

Existe duas formas que eu conheço

1 - criar o código javascript na própria página usando a tag script

<script type="text/javascript">
	// código javascript aqui 
</script>

2 - importa um arquivo javascript ( .js ) na tag head utilizando uma tag scritp

<head>
 <scripttype="text/javascript"src="path do arquivo"/script>
</head>
exemplo de código javascript
function validaFormulario( f ) {

	if( f.quantidade.value == null || f.quantidade.value == "" ){
		
		alert( " sua msg  " );
		return false;
	}

     return true;
}
e no form 

<form action=" sua action " onsubmit=" return validaFormulario(this)"/>
thokk

Se vc quiser validar apenas letras é só vc pegar o vetor acima e ao invés de ser numeros ex:[telefone removido] coloque qwertyuiopasdfghjklçzxcvbnm

//*************************************************
 //Verifica se é numerico
 //Ou melhor o que vc digitar esta dentro daquele vetor
 function Numeric(sText)
 {
   var ValidChars = "qwertyuiopasdfghjklçzxcvbnm";
   //lembrando ValidChars = "qwertyuiopasdfghjklçzxcvbnm"; este é meu vetor
   //é o -/ é o que estou valindo e que pode ser usado
   //se não quiser é  vc tirar e colocar assim
   //ValidChars = "qwertyuiopasdfghjklçzxcvbnm";
   var IsNumber=true;
   var Char;
   var tes
   var sText = document.frmCheques.Agencia.value;
   tes = document.frmCheques.Agencia;
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
 		alert("O campo AGENCIA tem que ser númerico."+ "" + "--"+sText+"--" + "" +"é inválido.");
 		tes.focus();
 		document.frmCheques.Agencia.value="";
         }
      }
   return IsNumber; 
   }
L

Olha, valeu mesmo!!!
Com estes exemplos agora acho que poderei me situar melhor.
Agradeço a todos.
Abraços.

thokk

Falow… Qualquer problema, ou qualquer coisa que precisa estamos ai…

L

De novo…
Utilizei um exemplo, realmente consegui tratar este erro, porém necessito enviar este parâmetro para a próxima página.

Code:
 <BODY>
 <H1>Confirme a quantidade:</H1>
 <%	
 	try{ 
 		Integer.parseInt(request.getParameter("quantidade")); %>
 		<FORM method="POST" action="CompraSucesso.jsp">
 			<INPUT type="submit" name="codigo" value="<%= codigo %>">
 		</FORM>	
 <% 	}catch(Exception e){ 
 		out.println("ERRO");
 		out.println("Somente valor númerico!"); %>
 		Retorne:
 		<FORM method="post" action="ConfirmaProduto.jsp">
 		<INPUT type="submit" name="codigo" value="<%= codigo %>">
 		</FORM>
  <%	} %>
 </BODY>

enviando os dados código e quantidade para próxima página:

Code:
 jsp:useBean id="carro" class="carrinho.Carrinho" scope="session"/&gt
 <%
 	String codigo = request.getParameter( "codigo" );
 
 	carrinho.Produtos prodList = new carrinho.Produtos();
 	carrinho.Produto p = prodList.getProduto(codigo);
 	
 	p.setQuantidade(Integer.parseInt(request.getParameter("quantidade")));
 
 	carro.addProduto(p);
 
 	String descricao = p.getDescricao();
 	int valor = p.getValor();
 	%>
 
 <HTML>
 <HEAD>
 <TITLE>CompraSucesso.jsp</TITLE>
 </HEAD>
 <BODY>
 <B>Conteúdo de sua compra:</B><BR><BR>
 <TABLE border="2">
 	<tr>
 		<TD width="90"><b>Código</b><TD>
 		<TD width="190"><b>Produto</b></TD>
 		<TD width="50" align="center"><b>Valor</b></TD>
 		<TD width="50" align="center"><b>Qtd</b></TD>
 		<TD width="60" align="center"><b>Subtotal</b></TD>
 	</tr>
 </TABLE>
 <%! int total = 0;%>
 <%
 	List cc = carro.getList2();
 	int subtotal = 0, total = 0;
 		for(int i = 0; i < cc.size(); i++){
 			carrinho.Produto n = (carrinho.Produto)cc.get(i);
 			subtotal = n.getQuantidade() * n.getValor();
 			total+=subtotal; 
 	 %>
 
 <TABLE border="2">
 	<tr>
 		<TD width="90"><% out.println(n.getCodigo()); %><TD>
 		<TD width="190"><% out.println(n.getDescricao()); %></TD>
 		<TD width="50" align="right"><% out.println(n.getValor()); %></TD>
 		<TD width="50" align="right"><% out.println(n.getQuantidade()); %></TD>
 		<TD width="60" align="right"><% out.println(subtotal); %></TD>
 	</tr>		
 </TABLE>
 <% } %>
 <TABLE border="2">
 	<tr>
 		<TD width="407" colspan="4" align="right"><b>Total</b></TD>
 		<TD width="60" align="right"><%= total %></TD>
 	</tr>
 </TABLE><BR><BR>
 &lt%
 	if(p.getQuantidade() &gt= 2){
 		%&gt<H4>Você comprou <%= p.getQuantidade() %> unidade(s) do mesmo produto!</H4>
 		<% } %>
 <BR>
 <FORM action="Lista.jsp">
 	<INPUT type="submit" value="Novo Item">
 </FORM>
 <FORM action="CarroLista">
 	<INPUT type="submit" value="Fechar">
 </FORM>
 </BODY>
 </HTML>

Onde a quantidade para mim fica desaparecida, o código é enviado normalmente, mas a quantidade se perde, será devido eu colocar “p.setQuantidade(Integer.parse…” novamente?

ramilani12

Como já disseram utilize JavaScript:

Uma forma de identificar se o usuário digitou números:

if(!isInteger(cod)) 
	{
		alert('A matrícula deve conter somente numeros.\nEx.: 00001111\n');
		
		return false;
	}
Criado 25 de julho de 2007
Ultima resposta 25 de jul. de 2007
Respostas 14
Participantes 7