Validando formulário

4 respostas
ArianeRebellato

Boa noite!! Estou prestes a entregar um trabalho na faculdade e preciso de ajuda!! O que eu tenho que fazer pra isso funcionar??? Quero validar os campos do formulário…isso até acontece, mas insere mesmo assim…

<%@page import="javax.swing.JOptionPane"%>
<%@page import="java.text.DateFormat"%>
<%@page import="entidades.Contas"%>
<%@page import="java.util.ArrayList"%>
<%@page import="javax.persistence.Query"%>
<%@page import="javax.persistence.EntityManager"%>
<%@page import="util.HibernateUtil"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<script type="text/javascript">

    function validaCampo()
    {
	
        d = document.formulario;	
	
        if(d.descricao.value=="" || d.descricao.value=="null")
        {
            alert("O Campo descricao é obrigatório!");
            return false;
        }
        else
            if(d.valor.value=="")
        {
            alert("O Campo Valor é obrigatório!");
            return false;
        }
         else
            if(d.dt_lancamento.value=="")
        {
            alert("O Campo Data de Lançamento é obrigatório!");
            return false;
        }
        if(d.dt_lancamemnto.value == "" || 
            d.dt_lancamemnto.value.indexOf('dd/mm/aaaa')==-1 ) {
            alert("O campo deve conter uma data!");
            d.dt_lancamemnto.focus();
            return false;
        }
        if(d.tipo.value=="")
        {
           alert("O Campo Tipo é obrigatório!");
            return false;
        }
        else
            return true;
    }
    <!-- Fim do JavaScript que validará os campos obrigatórios! -->
</script>


<%
    EntityManager manager = HibernateUtil.getManager();
    Contas contas = new Contas();

    if (request.getParameter("id") != null) {
        contas = manager.find(Contas.class, Integer.parseInt(request.getParameter("id")));
    }


    if (request.getMethod().equals("POST")) {
        contas.setDescricao(request.getParameter("descricao"));
        contas.setTipo(request.getParameter("tipo").charAt(0));
        if (contas.getDt_baixa() != null && contas.getDt_lancamento() != null) {
            try {
                contas.setDt_baixa(DateFormat.getDateInstance().parse(request.getParameter("dt_baixa")));
                contas.setDt_lancamento(DateFormat.getDateInstance().parse(request.getParameter("dt_lancamento")));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Cuidado ao inserir a data!");
            }
        }
        contas.setValor(Double.parseDouble((request.getParameter("valor"))));


        manager.getTransaction().begin();
        manager.persist(contas);
        JOptionPane.showMessageDialog(null, "Inserido com sucesso");
        manager.getTransaction().commit();
    }



%>

<html>
    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Gerenciar Contas</title>
    </head>
    <body style="color: cornsilk">
        <p> <%@ include file="cabecalho.jsp" %></p>
        <p align="center">Lista de Contas</p>
        <table border="1" align="center">
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Descrição</th>
                    <th>Dt Lançamento</th>
                    <th>Dt Baixa</th>
                    <th>Tipo</th>
                    <th>Valor</th>
                </tr>
            </thead>
            <tbody>
                <%
                    Query query = manager.createQuery("select c from Contas c");// vai recuperar coleção de objeto

                    ArrayList<Contas> lista = (ArrayList<Contas>) query.getResultList();// vai ter estados na lista
                    for (Contas conta : lista) {//percorre a lista de estados 


                %>

                <tr>
                    <td><%= conta.getId()%></td>
                    <td><%= conta.getDescricao()%></td>
                    <td><%= conta.getDt_lancamento()%></td>
                    <td><%= conta.getDt_baixa()%></td>
                    <td><%= conta.getTipo()%></td>
                    <td><%= conta.getValor()%></td>
                    <td> <a style="text-decoration: none; color: aliceblue" href="editar.jsp?id=<%=conta.getId()%>">Editar</a></td>


                </tr>
                <%  }

                    contas = new Contas();
                    manager.close();

                %>
            </tbody>
        </table>
        <br>
        <form name="formulario" method="POST">
            <table width="264" border="0" align="center" cellpadding="0" cellspacing="5">
                <tr>
                    <td height="49" colspan="2" class="FORMULARIO" ><p align="center">Adicionar Conta</p></td>
                </tr>
                <tr>
                    <td width="104" class="FORMULARIO">Descrição:</td>
                    <td width="144" class="FORMULARIO"><input type="text" name="descricao" value="<%= contas.getDescricao()%>" /></td>
                </tr>
                <tr>
                    <td class="FORMULARIO">Tipo:</td>
                    <td class="FORMULARIO"><select name="tipo">
                            <option value="E">Pagar</option>
                            <option value="R">Receber</option>
                        </select></td>
                </tr>
                <tr>
                    <td class="FORMULARIO">Data de Lançamento:</td>
                    <td class="FORMULARIO"><input type="text" name="dt_lancamento" value="<%= contas.getDt_lancamento()%>" /></td>
                </tr>
                <tr>
                    <td class="FORMULARIO">Data de Baixa:</td>
                    <td class="FORMULARIO"><input type="text" name="dt_baixa" value="<%= contas.getDt_baixa()%>" /></td>
                </tr>
                <tr>
                    <td class="FORMULARIO">Valor:</td>
                    <td class="FORMULARIO"><input type="text" name="valor" value="<%= contas.getValor()%>" /></td>
                </tr>
                <tr>
                    <td class="FORMULARIO">&nbsp;</td>
                    <td class="FORMULARIO">
                        <input type="submit" value="Enviar" name="enviar" onclick="validaCampo()" />
                    </td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                </tr>
            </table>
        </form>
        <center> <a style="text-decoration: none; color: aliceblue" href="index.jsp">>>Voltar para página principal</a></center>

        <p> <%@ include file="rodape.jsp" %></p>

    </body>
</html>

4 Respostas

J

Tenta trocar essa linha por essa

&lt;input type="submit" value="Enviar" name="enviar" onclick="validaCampo()" /&gt;

por essa

&lt;input type="button" value="Enviar" name="enviar" onclick="validaCampo()" /&gt;

Quando você coloca o input como type = submit, ele envia os dados automaticamente. Trocamos para button, para enviar quandos nós quisermos.

E para enviar, vamos mexer na sua função javascript.

No último else, coloca assim

d.submit();

Se funcionar, posta aqui, que a gente vai melhorar teu código

ArianeRebellato

acabei fazendo diferente…na pressa achei que o javascript ia facilitar e acabou me atrapalhando…tenhoq ue correr apresentar! ficou assiim…nem testei direito…não sei se ta td certo,…

<%
    EntityManager manager = HibernateUtil.getManager();
    Contas contas = new Contas();

      if (request.getMethod().equals("POST")) {

        //Se inserir sem preencher corretamente, entra na flag 1 em baixo e retorna mensagem!
        int status = 0;

//Valida se descrição, data de lançamento ou valor são nulas, se forem flag recebe 1 e retorna aviso!
        if (request.getParameter("descricao").isEmpty() == false
                && request.getParameter("dt_lancamento").isEmpty() == false
                && request.getParameter("valor").isEmpty() == false) {


            //Converte e pega dt_lancamento:
            try {
                contas.setDt_lancamento(DateFormat.getDateInstance().parse(request.getParameter("dt_lancamento")));
            } catch (Exception ex) {
                System.out.println(ex);
            }

            //Converte e pega dt_baixa, testa se é nula, se for insere null:
            if (request.getParameter("dt_baixa") == null) {
                //novaConta.setData_baixa(novaConta.getData_lancamento());
                contas.setDt_baixa(null);
            } else {
                try {

                    contas.setDt_baixa(DateFormat.getDateInstance().parse(request.getParameter("dt_baixa")));
                } catch (Exception ex) {
                    System.out.println(ex);
                }
            }

            contas.setDescricao(request.getParameter("descricao"));
            contas.setTipo(request.getParameter("tipo").charAt(0));

            //Pega e testa se tem valor > 0)
            if ((Float.parseFloat(request.getParameter("valor")) < 9999999)
                    && (Float.parseFloat(request.getParameter("valor")) > 0)) {
                contas.setValor(Float.parseFloat(request.getParameter("valor")));
                //se td bem persiste a conta
                manager.getTransaction().begin();
                manager.persist(contas);
                manager.getTransaction().commit();


                //senão retorna mensagem!
            } else {
                status = 1;
            }

//se não passou no teste lá em cima do preenchimento correto do formulario:
        } else {
            status = 1;
        }
        if (status == 0) {
            JOptionPane.showMessageDialog(null, "Inserido com sucesso");

        } else {
            if (status == 1) {
                JOptionPane.showMessageDialog(null, "Campos preenchidos incorretamente");


            }
        }

    }
%>

depois eu aceito a ajuda pra melhorar! agora não vai dar tempo…mas muuuuito obrigada

J

Ok, mas cabe uma explicação.

Você está fazendo a validação com scriptlet. Ou seja, o usuário precisa mandar os dados para o servidor, para ele verificar. A validação com javascript, faz a validação no navegador, ou seja, no lado cliente. Impede do usuário enviar dados errados para o servidor. Assim é mais performático.

Mas cabe a ressalva, que as duas validações devem ser implementadas. Tanto do lado cliente, por causa da performance de não enviar dados desnecessários ao servidor, quanto do lado do servidor, porque o cliente pode desativar o javascript e acabar com a sua validação.

Então, quando puder, tente implementar o javascript também. Vale a pena.

ArianeRebellato

vou fazer isso sim…eu tenho mais dez dias pra terminar este trabalho…tenho muito trabalho ainda pela frente…eheheh…ontem foi uma das apresentações…valeu pelas dicas!

Criado 22 de junho de 2011
Ultima resposta 23 de jun. de 2011
Respostas 4
Participantes 2