Validando formulário

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>


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

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

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.

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!