Verificar Campos com JavaScript, erro no JSP

19 respostas
fejohann

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

lele_vader

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?

fejohann

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

lele_vader

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.

fejohann

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();

??

lele_vader

entao vc pode colocar isso aqui

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

fejohann

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.

lele_vader

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==""){

lele_vader

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.

fejohann

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>
fejohann

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();
fejohann

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.

lele_vader

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”.

fejohann

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