Verificar Campos com JavaScript, erro no JSP

19 respostas
F

Ola pessoal, estou com dúvidas para validar campos no jsp!

Já tentei implementar via javascript, mas nada acontece, não sei onde erro…

Eis minha JSP:

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://jakarta.apache.org/taglibs/display" prefix="display"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Cadastro de Alternativas</title>
</head>
<body>
<div class="content1-container line-box">
        <p class="content-title-noshade-size3">Cadastro de Alternativas</p>
        	<div class="content-txtbox-noshade">
                    <form name="frm" action="alternativa.do" method="post" >
            <table cellspacing="1" cellpadding="3" border="0" width="100%"
                   align="center" bgcolor="#d6e7ff">
                <tr>
                    <td width="10%">
                        C&oacute;digo</td>
                    <td width="90%">
                        <input type="text" name="alternativa.alt_cod"
                               value="${alternativa.alt_cod}" size="10"
                               disabled="disabled"/>  
                    </td>
                </tr><tr>
                    <td width="10%">Alternativa</td>
                    <td width="90%">
                        <input type="text" name="alternativa.alt_desc"
                               value="${alternativa.alt_desc}" size="40"/> ${desc}
                    </td>
                </tr>
                <tr>
                    <td width="10%">Valor</td>
                    <td width="90%">
                        <input type="text" name="alternativa.alt_valor"
                               value="${alternativa.alt_valor}" size="40"/>
                    </td>
                </tr>
                <tr>
                    <td width="10%">
                        <a href="pergunta.do?acao=list">Pergunta:</a></td>
                    <td width="90%">
        <select name="pergunta.per_cod" >
            <c:forEach var="listaPergunta" items="${listaPergunta}">  
                <option value="${listaPergunta.per_cod}" 
                    ${listaPergunta.per_cod eq pergunta.per_cod ? 'selected' : ''} >
                    ${listaPergunta.per_cod}
                </option>  
            </c:forEach>  
        </select>
                    </td>
                </tr><tr>
                    <td width="10%">&nbsp;</td>
                    <td width="90%">
                        <input type="button" name="btInsert" value="Inserir"
                               onclick="this.form.acao.value='inserir';this.form.submit();"/>
                        <input type="button"
                               name="btEditar"
                               value="Editar"
                               onclick="this.form.acao.value='update';this.form.submit();"/>
                        <input type="button"
                               name="btExcluir"
                               value="Excluir"
                               onclick="this.form.acao.value='delete';this.form.submit();"/><input type="hidden"
                               name="acao"
                               value="I"/>
                    </td>
                </tr>
            </table>
        </form>
         <p>
    &nbsp;
  </p>
  <p>
            <display:table align="center" name="dados"
                   requestURI="alternativa.do?acao=listar"
                   width="90%">
                <p>
                    <display:column width="5%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Cod A:" property="alt_cod"
                                    paramProperty="alt_cod" sort="true"/>
                    <display:column width="40%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Alternativa:"
                                    property="alt_desc"
                                    paramProperty="alt_cod" sort="true" maxLength="18"/>
                    <display:column width="10%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Val:"
                                    property="alt_valor"
                                    paramProperty="alt_cod" sort="true"/>                    
                    <display:column width="30%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Pergunta:"
                                    property="pergunta.per_pergunta"
                                    paramProperty="alt_cod" sort="true" maxLength="10"/>                                        
                    <display:column width="5%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Cod P:" 
                                    property="pergunta.per_cod"
                                    paramProperty="alt_cod" sort="true"/>
      </display:table>
  </p>
</div>
</div>
  </body>
</html>

Quando tentei com o JavaScript, eu mudei o evento onclick do botão, para chamar o javascript.

Realmente ja quebrei a cabeça, e não consegui…

Alguém consegue me dizer como fazer Isso

19 Respostas

L

Coloca o javascript que vc fez ?

Você chegou a debugar o javascript e viu se o campo referenciado chega o valor ?

E

tentou usar o evento onsubmit do form?

F

a função era simples, digo simples pois exclui já, desisti e estava tentando validar na ACTION…

bem, era algo como:

valida(){

if(alternativa.alt_desc == ""){

alerta.
foco para o campo e return false
}
aqui eu seto this.acao.value="inserir"...

ai na declaração do form onsubmit=“return valida (this)”

e no botao chamo o valida();

não sei onde estou errando

L

vc nao tinha que fazer ${alternativa.alt_desc} para ver o valor não ?

tenta fazer talvez passar this no método javascript para pegar o valor dos campos, ou por getElementById mesmo e chamar value para ver o valor.

Tenta debugar com uma ferramenta estilo firebug para ver se está passando o valor corretamente.

F

Eu consigo chamar o javaScript…
o que não consigo fazer é:

como fazer o javaScript fazer o que o botão fazia:

onclick="this.form.acao.value='inserir';this.form.submit();

??

L

entao vc pode colocar isso aqui

document.forms[0].value = “valor”
e document.forms[0].submit

F

usei assim:

<script language="javascript" type="text/javascript">
function validar() {
    if(document.forms[0].getElementsByName("alternativa.alt_cod")==""){
        alert('Preencha o campo com seu nome');
    }
        document.forms[0].value = "inserir" 
        document.forms[0].submit 
    }
</script>

e deixo o campo em branco, e não da o alerta…

funcionou antes quando fiz assim o script:

funcion validar(){
alert('Preencha o campo com seu nome');
}

Não estou entendendo

E

fejohan, a melhor alternativa seria assim (não que a forma que o lele_vader mencionou não fosse funcionar):

<script>
 function validaForm(){
  if(blablablabla......) //qualquer lógica de verificação nessa função
   return true;
  return false;
 }
<form onsubmit="return validaForm()">

Se o validaForm retornar false, o formulário não é enviado.

L

Coloca um id para os textFields

vc tem que colocar o else.

Senão ele vai entrar do mesmo jeito.

e usa document.getElementById

E

if(document.forms[0].getElementsByName(“alternativa.alt_cod”)==""){

o elemento nunca vai ser “”, você tem que comparar o value dele:

if(document.forms[0].getElementsByName(“alternativa.alt_cod”).value==""){

L

Sim.

Realmente a forma que o evefuji colocou é a melhor.

Daí nesse validaForm vc faz a verificação que necessitar, e se der erro em algo coloca as mensagens de erro em alguma div talvez.

Existe um plugin do jquery para validação de campos de tela.
Se quiser usar o nome é jquery validate.

F

Ele manda o alerta, chamou validar, mas não tem jeito de mostrar o outro alerta!

<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://jakarta.apache.org/taglibs/display" prefix="display"%>
<html>
<head>
<script language="javascript" type="text/javascript">
function validar() {
    alert('Chamou o validar');
    if(document.getElementById(001).value==""){
        alert('Preencha o campo com seu nome');
    }
        document.frm.value = "inserir" 
        document.frm.submit(); 
    }
</script>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Cadastro de Alternativas</title>
</head>
<body>
<div class="content1-container line-box">
        <p class="content-title-noshade-size3">Cadastro de Alternativas</p>
        	<div class="content-txtbox-noshade">
                    <form name="frm" action="alternativa.do" method="post" onsubmit="return validar()">
            <table cellspacing="1" cellpadding="3" border="0" width="100%"
                   align="center" bgcolor="#d6e7ff">
                <tr>
                    <td width="10%">
                        C&oacute;digo</td>
                    <td width="90%">
                        <input type="text" name="alternativa.alt_cod"
                               value="${alternativa.alt_cod}" size="10"
                               disabled="disabled"/>  
                    </td>
                </tr><tr>
                    <td width="10%">Alternativa</td>
                    <td width="90%">
                        <input type="text" name="descricao"
                               value="${alternativa.alt_desc}" size="40" id="001"/> ${desc}
                    </td>
                </tr>
                <tr>
                    <td width="10%">Valor</td>
                    <td width="90%">
                        <input type="text" name="alternativa.alt_valor"
                               value="${alternativa.alt_valor}" size="40"/>
                    </td>
                </tr>
                <tr>
                    <td width="10%">
                        <a href="pergunta.do?acao=list">Pergunta:</a></td>
                    <td width="90%">
        <select name="pergunta.per_cod" >
            <c:forEach var="listaPergunta" items="${listaPergunta}">  
                <option value="${listaPergunta.per_cod}" 
                    ${listaPergunta.per_cod eq pergunta.per_cod ? 'selected' : ''} >
                    ${listaPergunta.per_cod}
                </option>  
            </c:forEach>  
        </select>
                    </td>
                </tr><tr>
                    <td width="10%">&nbsp;</td>
                    <td width="90%">
                        <input type="button" name="btInsert" value="Inserir" onclick="validar()"/>
                               <!--onclick="this.form.acao.value='inserir';this.form.submit();"/>-->
                               
                        <input type="button"
                               name="btEditar"
                               value="Editar"
                               onclick="this.form.acao.value='update';this.form.submit();"/>
                        <input type="button"
                               name="btExcluir"
                               value="Excluir"
                               onclick="this.form.acao.value='delete';this.form.submit();"/><input type="hidden"
                               name="acao"
                               value="I"/>
                    </td>
                </tr>
            </table>
        </form>
         <p>
    &nbsp;
  </p>
  <p>
            <display:table align="center" name="dados"
                   requestURI="alternativa.do?acao=listar"
                   width="90%">
                <p>
                    <display:column width="5%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Cod A:" property="alt_cod"
                                    paramProperty="alt_cod" sort="true"/>
                    <display:column width="40%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Alternativa:"
                                    property="alt_desc"
                                    paramProperty="alt_cod" sort="true" maxLength="18"/>
                    <display:column width="10%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Val:"
                                    property="alt_valor"
                                    paramProperty="alt_cod" sort="true"/>                    
                    <display:column width="30%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Pergunta:"
                                    property="pergunta.per_pergunta"
                                    paramProperty="alt_cod" sort="true" maxLength="10"/>                                        
                    <display:column width="5%" href="alternativa.do?acao=listar"
                                    paramId="alternativa.alt_cod"
                                    title="Cod P:" 
                                    property="pergunta.per_cod"
                                    paramProperty="alt_cod" sort="true"/>
      </display:table>
  </p>
</div>
</div>
  </body>
</html>
F

Funcionou usando assim:

function validar() {
    alert('Chamou o validar');
    var desc = document.frm.descricao.value;
    if(desc==""){
        alert('Preencha o campo com seu nome');
    }
        document.frm.value = "inserir" 
        document.frm.submit();
F

Mas o submit ainda não funciona… ou seja, não grava em banco…

erro:

Mai 18, 2012 6:21:14 PM org.apache.struts.actions.DispatchAction dispatchMethod
Grave: Action[/alternativa] does not contain method named ‘I’
java.lang.NoSuchMethodException: action.AlternativaACT.I(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)

E

document.getElementById(001).value
isso não funcionou porque 001 é número, quando ele vai transformar em String para pegar o elemento ele transforma em “1”.

E o submit está funcionando, o que não está funcionando é o action do struts no servidor, olha bem a mensagem de erro, está faltando você definir um método.

L

Além disse coloque o se método assim

function validar() {   
    alert('Chamou o validar');   
    var desc = document.frm.descricao.value;   
    if(desc==""){   
        alert('Preencha o campo com seu nome');   
    }   
    // fazer submit se não for vazio
    else{
        document.frm.value = "inserir"   
        document.frm.submit();   
   }
     function validar() {
    alert('Chamou o validar');
    var desc = document.frm.descricao.value;
    if(desc==""){
        alert('Preencha o campo com seu nome');
    }
        document.frm.value = "inserir" 
        document.frm.submit();

Mostre o seu struts.xml a action alternativa.do para entender o outro erro

F

jeito e não “geito”.

F

Ola, desculpem a demora…

Pois bem:

meu Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">

<struts-config>
    
    <form-beans>
        <form-bean name="AdministradorACTForm" type="actionForm.AdministradorACTForm"/>
        <form-bean name="LogAdminACTForm" type="actionForm.LogAdminACTForm"/>
        <form-bean name="SecaoACTForm" type="actionForm.SecaoACTForm"/>
        <form-bean name="PerguntaACTForm" type="actionForm.PerguntaACTForm"/>
        <form-bean name="AlternativaACTForm" type="actionForm.AlternativaACTForm"/>
        <form-bean name="RespondedorACTForm" type="actionForm.RespondedorACTForm"/>
        <form-bean name="EmpresaACTForm" type="actionForm.EmpresaACTForm"/>
        <form-bean name="RespostasACTForm" type="actionForm.RespostasACTForm"/>
        <form-bean name="QuestionarioACTForm" type="actionForm.QuestionarioACTForm"/>
    </form-beans>
    
    <global-exceptions>
    
    </global-exceptions>
   
    <global-forwards>
        <forward name="index"  path="/index.do"/>
        <forward name="exigeAdmin"  path="/Administrador.do?acao=exigeAdmin"/>
        <forward name="indexRespondedor" path="/respondedor.do?acao=indexRespondedor"/>
        <forward name="indexAdmin" path="/Administrador.do?acao=indexAdmin"/>
    </global-forwards>
    
   
   <action-mappings>
        
    <action path="/layout" type="action.LayoutACT">
    <forward name="success" path="/layout.jsp"/>
     
    </action>
    
    <action path="/index" type="action.IndexACT">
      <forward name="success" path="index.page"/>
    </action>
    
    <action path="/Administrador" type="action.AdministradorACT" 
     name="AdministradorACTForm"
            parameter="acao">
      <forward name="logado" path="indexAdmin.page"/>
      <forward name="exigeAdmin" path="exigeAdmin.page"/>
      <forward name="success" path="logAdmin.page"/>
      <forward name="meusDados" path="meusDados_adm.page"/>
    </action>
        
    <action path="/secao" type="action.SecaoACT"
            name="SecaoACTForm" parameter="acao">
      <forward name="success" path="secao.page"/>
    </action>  
        
     <action path="/pergunta" type="action.PerguntaACT"
            name="PerguntaACTForm" parameter="acao">
      <forward name="success" path="pergunta.page"/>
    </action>
   
    <action path="/alternativa" type="action.AlternativaACT"
            name="AlternativaACTForm" parameter="acao">
      <forward name="success" path="alternativa.page"/>
    </action>
   
   <action path="/respondedor" type="action.RespondedorACT" 
            name="RespondedorACTForm" parameter="acao">
      <forward name="gerir_respondedor" path="gerir_respondedor.page"/>
      <forward name="success" path="logRespondedor.page"/>
      <forward name="novoRespondedor" path="novoRespondedor.page"/>
      <forward name="nova_empresa" path="nova_empresa.page"/>
      <forward name="indexRespondedor" path="indexRespondedor.page"/>
      <forward name="meusDados" path="meusDados.page"/>
      <forward name="sucesso" path="sucesso.page"/>
      <forward name="questionario_aberto" path="questionario_aberto.page"/>
      
    </action>
    
    <action path="/empresa" type="action.EmpresaACT" 
            name="EmpresaACTForm" parameter="acao">
      <forward name="success" path="empresa.page"/>
      <forward name="nova_empresa" path="nova_empresa.page"/>
      <forward name="sucesso_empresa" path="sucesso_empresa.page"/>
      <forward name="minhaEmpresa" path="minhaEmpresa.page"/>
      
    </action>
   
    <action path="/respostas" type="action.RespostasACT"
            name="RespostasACTForm" parameter="acao">
      <forward name="success" path="responder_questionario.page"/>
      <forward name="tipo_questionario" path="tipo_questionario.page"/>
      <forward name="questionario_concluido" path="questionario_concluido.page"/>
      <forward name="meus_questionarios" path="meus_questionarios.page"/>
      <forward name="logout" path="logRespondedor.page"/>
    </action>
    
    <action path="/questionario" type="action.QuestionarioACT"
            name="QuestionarioACTForm" parameter="acao">
      <forward name="meus_questionarios" path="meus_questionarios.page"/>
      <forward name="tipo_questionario" path="tipo_questionario.page"/>
      <forward name="questionario_aberto" path="questionario_aberto.page"/>
      <forward name="questionarioRespondedores" path="questionarios_respondedores.page"/>
    </action>


    </action-mappings>
    
    <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/>

    <message-resources parameter="com/myapp/struts/ApplicationResource"/>    
    
    
    <plug-in className="org.apache.struts.tiles.TilesPlugin" >
        <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />      
        <set-property property="moduleAware" value="true" />
    </plug-in>
    
    <!-- ========================= Validator plugin ================================= -->
    <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
        <set-property
            property="pathnames"
            value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
    </plug-in>
  
</struts-config>

minha ACT

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package action;

/**
 *
 * @author Felipe
 */

import actionForm.AlternativaACTForm;
import dao.AlternativaDAO;
import dao.PerguntaDAO;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.Alternativa;
import model.Pergunta;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public class AlternativaACT extends DispatchAction {
    /**This is the main action called from the Struts framework.
     * @param mapping The ActionMapping used to select this instance.
     * @param form The optional ActionForm bean for this request.
     * @param request The HTTP Request we are processing.
     * @param response The HTTP Response we are processing.
     */
        public ActionForward listar(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException,
                                                                      ServletException {
        if (request.getSession().getAttribute("adminLogado")==null){
            return mapping.findForward("exigeAdmin");
        }
        
        AlternativaACTForm formulario = (AlternativaACTForm) form;
        
        Alternativa alternativa = formulario.getAlternativa();
        Pergunta pergunta = formulario.getPergunta();
        
        alternativa.setPergunta(pergunta);

        AlternativaDAO daoAlternativa = new AlternativaDAO();
        PerguntaDAO daoPergunta = new PerguntaDAO();

        if (alternativa.getAlt_cod() > 0){
            request.setAttribute("alternativa", daoAlternativa.buscar(alternativa) );
        }
        
        request.setAttribute("listaPergunta", daoPergunta.select());
        
        List<Alternativa> dados = daoAlternativa.select();
        
        request.setAttribute("dados", dados);
        
        return mapping.findForward( "success");
    }
    
    public ActionForward inserir(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException,
                                                                      ServletException {
        if (request.getSession().getAttribute("adminLogado")==null){
            return mapping.findForward("exigeAdmin");
        }
        
        AlternativaACTForm formulario = (AlternativaACTForm) form;
        
        Alternativa alternativa = formulario.getAlternativa();
        Pergunta pergunta = formulario.getPergunta();
        
        alternativa.setPergunta(pergunta);      
       
        PerguntaDAO daoPergunta = new PerguntaDAO();
        
        AlternativaDAO dao = new AlternativaDAO();

        if (alternativa.getAlt_desc() != ""){
            dao.inserir(alternativa);
        }
        
        List<Pergunta> listaPergunta = daoPergunta.select();
        
        request.setAttribute("listaPergunta", listaPergunta);
        
        List<Alternativa> dados = dao.select();
        
        request.setAttribute("dados", dados);
        
        return mapping.findForward( "success");
    }
    
    public ActionForward update(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException,
                                                                      ServletException {
        if (request.getSession().getAttribute("adminLogado")==null){
            return mapping.findForward("exigeAdmin");
        }
        
        AlternativaACTForm formulario = (AlternativaACTForm) form;
        
        Alternativa alternativa = formulario.getAlternativa();
        Pergunta pergunta = formulario.getPergunta();
        
        alternativa.setPergunta(pergunta);      
       
        AlternativaDAO dao = new AlternativaDAO();
        
        PerguntaDAO daoPergunta = new PerguntaDAO();

        if (alternativa.getAlt_cod() > 0){
            dao.alterar(alternativa);
        }
        
        List<Pergunta> listaPergunta = daoPergunta.select();
        
        request.setAttribute("listaPergunta", listaPergunta);
        
        List<Alternativa> dados = dao.select();
        
        request.setAttribute("dados", dados);
        
        return mapping.findForward( "success");
    }
    
    public ActionForward delete(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) throws IOException,
                                                                      ServletException {
        if (request.getSession().getAttribute("adminLogado")==null){
            return mapping.findForward("exigeAdmin");
        }
        
        AlternativaACTForm formulario = (AlternativaACTForm) form;
        
        Alternativa alternativa = formulario.getAlternativa();
        Pergunta pergunta = formulario.getPergunta();
        
        alternativa.setPergunta(pergunta);      
       
        AlternativaDAO dao = new AlternativaDAO();
        
        PerguntaDAO daoPergunta = new PerguntaDAO();
        
        if (alternativa.getAlt_cod() > 0){
            dao.excluir(alternativa);
        }
        
        List<Pergunta> listaPergunta = daoPergunta.select();
        
        request.setAttribute("listaPergunta", listaPergunta);
        
        List<Alternativa> dados = dao.select();
                
        request.setAttribute("dados", dados);
        
        return mapping.findForward( "success");
    }
       
}

Esse método que estaria em tese faltando esta presente…

Tudo funciona sem o script/verificação de inputs…

E

não conheço struts, mas no faces quando você clica no botão, ele modifica valores no form para indicar o action, vê se com aquela verificação que te expliquei antes, no onsubmit do form, não chama o action do struts.

Criado 18 de maio de 2012
Ultima resposta 19 de mai. de 2012
Respostas 19
Participantes 4