Jquery não esta salvando os valores passados

25 respostas
N

Boa noite GUJ’S,
estou fazendo meu TG e estou com uma dificuldade, tenho uma pagina de cadastro que contem um campo CNPJ/CPF com um radio onde irá escolher entre um ou outro.

cadastrar.jsp

<tr>
                
                <td bgcolor ="white">CNPJ <font color="red">*</font> 
                    <input  selected ="selected" type="radio" name="selecao" value="cnpj" class="selecao" />
                                                       
                  CPF: <input type="radio" name="selecao" value="cpf" class="selecao" /></br>
                   <div id="localCampo">
                   
                       <input type="text" id="cnpj" name="cnpj" />;
                                                
                      
           </div>

neste faço a escolha da mascara

<script >
            
            $(document).ready(function(){
               $("#date").mask("99/99/9999");
               $("#phone").mask("(999) 999-9999");
               $("#tin").mask("99-9999999");
               $("#ssn").mask("999-99-9999");
               $("#cnpj").mask("99.999.999/9999-99");
               
               $(".selecao").click(function(){
                   var Campo= $(this).val();
                   var inserirCampo= '<input type="text" id="'+Campo+'" name= "'+Campo+'">';
                   $("#localCampo").html(inserirCampo);
                   $("#cnpj").mask("99.999.999/9999-99");
                   $("#cpf").mask("[CPF removido]");
                   
               })
                   
});

    </script>

até aqui tudo bem
na minha controller tenho
Cadastrar(controller)

String cnpj_cpfPatrocinador = request.getParameter("cnpj_cpfPatrocinador");

onde cnpj_cpfPatrocinador o mesmo nome no meu BD, onde irá receber o valor vindo
Então, não estou conseguindo enviar este valor para o BD, me passa null

Tenho que passar o valor ao BD podendo ou não ser passado com a mascara,
tenho ainda uma outra parte, caso eu queira editar…
tenho a;

alterar.jsp

<td bgcolor ="white">CNPJ <font color="red">*</font> 
                    <%
                            Patrocinador patrocinador = (Patrocinador) request.getAttribute("patrocinador");
                            String isCNPJ = "";
                            String isCPF = "";
                            if (patrocinador.getCnpj_cpfPatrocinador().length() > 15){
                                isCNPJ = "checked";
                            } else {
                                isCPF = "checked";
                            }

                        %>
                    <input type="radio" name="selecao" value="cnpj_cpfPatrocinador" class="selecao" <%= isCNPJ %> />
                    CPF: <input type="radio" name="selecao" value="cnpj_cpfPatrocinador" class="selecao" <%= isCPF %> /><br />
                    <div id="localCampo">
                        <input type="text" id="cnpj" name="cnpj" value="${patrocinador.cnpj_cpfPatrocinador}">
                    </div>

Não sei se esta certo porque não esta passando valores na hora de cadastrar.
Agradeço desde já a ajuda.

25 Respostas

L

o cadastrar.jsp tem um cnpj_cpfPatrocinador ?

N

Não, no cadastrar.jsp só tem

<tr>
                
                <td bgcolor ="white">CNPJ <font color="red">*</font> 
                    <input  selected ="selected" type="radio" name="selecao" value="cnpj" class="selecao" />
                                                       
                  CPF: <input type="radio" name="selecao" value="cpf" class="selecao" /></br>
                   <div id="localCampo">
                   
                       <input type="text" id="cnpj" name="cnpj" />;
                                                
                      
           </div>
N

em outros campos tenho desta forma

<tr>
                    <td  bgcolor ="white">Nome <font color="red">*</font></td>
                    <td><input type="text" name="nomePatrocinador" size="50" maxlength="50" ></td>
                </tr>
                <tr>
                    <td  bgcolor ="white">Endereço <font color="red">*</font></td>
                    <td><input type="text" name="enderecoPatrocinador" size="50" maxlength="50" ></td>
                </tr>

como o do cpf/cnpj é diferente, tem um jquery(mascara) tem estes valores…
não estou sabendo colocar o cnpj_cpfPatrocinador no local exato pra poder receber e enviar pro BD.

L

Você tem um Controller para cadastrar e um para alterar ou apenas um para os dois?

N

uma controller pra cada,
uma pra cadastrar

String cnpj_cpfPatrocinador = request.getParameter("cnpj_cpfPatrocinador");

//... setando 
patrocinador.setCnpj_cpfPatrocinador(cnpj_cpfPatrocinador);

e uma pra alterar

String cnpj_cpfPatrocinador = (request.getParameter("cnpj_cpfPatrocinador"));

//...setando

patrocinador.setCnpj_cpfPatrocinador(cnpj_cpfPatrocinador);
L

Vc ta obtendo um parametro enviado chamado cnpj_cpfPatrocinador, correto?

No jsp, tem que ter um name=“cnpj_cpfPatrocinador” pra ser enviado algo com este nome, concorda?

O seu cadastrar.jsp tá confuso. vc tem um campo radio pra selecionar se eh cpf ou cnpj. E depois um campo texto para informar um CPF(se tiver marcado um CPF no radio) ou um CNPJ (para preencher com um cnpj, caso tenha marcado cnpj no radio). É isso mesmo?

N

então, ai que esta, eu tenho o script que tem a opção do radio, se for cnpj ele abre o textbox com a mascara de cnpj, se for cpf ele faz o mesmo
na minha controller se eu colocar o valor cnpj e fizer o cadastro do cnpj, ele da certo, mais se fizer desta forma e eu marcar o cpf ele me passa null
e vice versa… já tentei colocar o meu cnpj_cpfPatrocinador em varios cantos pra ver se dava certo e não deu até o momento…
não sei se terei que criar uma varialvel pra receber o valor e passar ele depois… não sei…

L

Vc tem que fazer 1 passo de cada vez pra identificar o problema.

Primeira coisa…

Agora eu entendi que vc insere um campo de acordo com a escolha do radio.

var inserirCampo= '<input type="text" id="'+Campo+'" name= "'+Campo+'">';

Mas por que vc tem um campo cnpj declarado no codigo mesmo com essa insercao?

<div id="localCampo">  
     <input type="text" id="cnpj" name="cnpj" />;  
</div>

Outra coisa, o campo ta sendo inserido corretamente?

Vc pode inspecionar (com firebug por exemplo) esse elemento e ver qual o campo foi gerado, qual id, qual nome? Esta primeira parte ta correta?

N

Este codigo eu peguei na net, ele faz tudo direito, insere a mascara conforme escolhido,
só o valor que tem que ser guardado ele não da certo…
já tentei mudar este valor da id e colocar o cnpj_cpf_patrocinador mais não vai

<td><div id="localCampo">
                   
                       <input type="text" id="cnpj" name="cnpj" />
                                                
                      
           </div>
                </td>
L

Olha só…

você entende como vc captura os dados enviados?

O seu controller é uma implementação de HttpServlet?

Vc usa o getParameter como colocou ai em cima pra obter os dados?

O parametro do getParameter ta com o mesmo nome do “name” do elemento?

Se o campo que ta sendo inserido tem name=“qualquercoisa”, o getParameter ta sendo getParameter(“qualquercoisa”) ?

N

A controller é sim uma implementação HttpServlet, utilizo o getParameter para rceber os dados

public class CadastrarPatrocinador extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String nomePatrocinador = request.getParameter("nomePatrocinador");
        String enderecoPatrocinador = request.getParameter("enderecoPatrocinador");
       [color=red] String cnpj_cpfPatrocinador = request.getParameter("cnpj_cpfPatrocinador");//..<- se eu mudar aqui o valor e colocar cnpj, ele me traz o valor do cnpj [/color]
        System.out.println("Valor: " + cnpj_cpfPatrocinador);//...verificar o que esta me trazendo
        
          String mensagem = null;
        
        Patrocinador patrocinador = new Patrocinador();

        patrocinador.setNomePatrocinador(nomePatrocinador);
        patrocinador.setEnderecoPatrocinador(enderecoPatrocinador);
        patrocinador.setCnpj_cpfPatrocinador(cnpj_cpfPatrocinador);
try {
            GenericDAO dao = new PatrocinadorDAOImpl();
            if (dao.cadastrar(patrocinador)) {
                mensagem = "Patrocinador " + patrocinador.getNomePatrocinador() + " Cadastrado com sucesso!!";
            } else {
                mensagem = "problemas ao cadastrar Patrocinador! Confira os dados digitaos...";
            }
            request.setAttribute("mensagem", mensagem);
            request.getRequestDispatcher("indexAdministrador.jsp").forward(request, response);
        } catch (Exception ex) {
            System.out.println("Problema no Servlet ao cadastrar Patrocinador! Erro: " + ex.getMessage());
        }
    }
<tr>
                
                <td bgcolor ="white">CNPJ <font color="red">*</font> 
                    <input  selected ="selected" type="radio" name="cnpj_cpfPatrocinador" value="cnpj" class="selecao" />
                                                       
                  CPF: <input type="radio" name="cnpj_cpfPatrocinador" value="cpf" class="selecao" /></br>
                <td><div id="localCampo">
                   
                       <input type="text" id="cnpj" name="cnpj" />
                                                
                      
           </div>
                 </td>
            </tr>
L

A geração de inserir o campo automática sua está funcionando?

parece que não.

Você tem um campo predefinido

Por isso, quando vc dá um getParameter(“cnpj”) realmente vai funcionar.

A primeira coisa é… quando vc ta clicando no radio, ele ta gerando o campo? Vc sabe olhar via firebug qual o nome e id desse campo que ta sendo gerado?

O problema todo é … não existe <input type="text" name="cpf" /> no seu código. Parece que o jquery não tá gerando ele corretamente.

N

Quando eu clico no radio ele gera na textbox a mascara, ex: cnpj ele me abre assim no textbox ../-__
ele esta funcionando.

com relação ao firebug eu não sei utiliza-lo, tenho ele na minha maquina mais não utlizo…

L

Vc utiliza o chrome?
Clica no elemento gerado (no textbox) com botão direito, e depois em inspecionar elemento… após clicar no radio CPF e veja qual o NAME que ele gerou?

Vc tem que entender a logica do programa.

Ele gera um elemento do tipo inputtext, que tem um name. Além disso vc sabe se eh cpf ou cnpj de acordo com o radio.

Entao a logica eh assim…

1- obtem valor do elemento do radio (com isso vc sabe se foi selecionado cpf ou cnpj)
2- testa… se elemento for cpf, obtem um parametro com o nome do elemento gerado do tipo cpf
senao, se for cnpj, obtem um parametro com o nome do elemento gerado do tipo cnpj

Mas faça aí a primeira parte que te disse que chegaremos depois nos passos 1 e 2.

N

cliquei na radio cpf ele abriu a mascara e eu fiz como solicitou e me apareceu este valor
input#cpf
testei da mesma forma o cnpj e me mostrou
input#cnpj

L

Isto para o id? ou para o name?
Consegue ver estas duas propriedades ao inspecionar o elemento?

N

quando eu seleciono a opção desejada ele abre no texbox a mascara, eu clico no textbox com o direito do mouse
inspecionar elemento e ele só me mostra aquele valor, não mais

N

segue o todo o codigo que peguei, da uma olhada nele, não esta diferente

<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="jquery.js" type="text/javascript"></script>
        <script src="jquery.maskedinput.js" type="text/javascript"></script>
        <script >
            $(document).ready(function(){
               $("#date").mask("99/99/9999");
               $("#phone").mask("(999) 999-9999");
               $("#tin").mask("99-9999999");
               $("#ssn").mask("999-99-9999");
               $("#cnpj").mask("99.999.999/9999-99");
               
               $(".selecao").click(function(){
                   var Campo= $(this).val();
                   var inserirCampo= '<input type="text" id="'+Campo+'" name= "'+Campo+'">';
                   $("#localCampo").html(inserirCampo);
                   $("#cnpj").mask("99.999.999/9999-99");
                   $("#cpf").mask("[CPF removido]");
                   
               })
            
});

    </script>
    </head>
    <body>
        
          CNPJ: <input  selected ="selected" type="radio" name="selecao" value="cnpj" class="selecao">
           CPF: <input type="radio" name="selecao" value="cpf" class="selecao"></br>
           <div id="localCampo">
               <input type="text" id="cnpj" name="cnpj">
           </div>
 
    </body>
</html>
L

Retire

<input type="text" id="cnpj" name="cnpj">

do seu codigo.

Depois, insira o codigo abaixo no controller do cadastrar:

String cnpj_cpf = "";

String tipo = request.getParameter("selecao");
if (tipo.equals("cpf")){
	cnpj_cpf = request.getParameter("cpf");
} else if (tipo.equals("cnpj")){
	cnpj_cpf = request.getParameter("cnpj");
}
System.out.println("cnpj_cpf = " + cnpj_cpf);

e veja se dará algum resultado.

N

agora eu vi, quando eu seleciono o cnpj aparece assim na linha

<div id="localCampo"><input id="cnpj" type="text" name="cnpj"></input></div>

se eu clico em cpf

<div id="localCampo"><input id="cpf" type="text" name="cpf"></input></div>
N

agora sim, esta me trazendo os valores…
pra buscar faço da mesma forma?

L

Mas vc entendeu o que eu fiz no codigo?

vc entendeu como funciona o jquery? entendeu que quando vc seleciona o radio ele gera o campo…?

o mais importante é o entendimento.

se tiver alguma duvida do codigo que te mandei, posta.

vc ja fez a busca? se tiver feito, posta como está.

N

Entendi sim

String cnpj_cpf = "";  // declaração da variavel( que no meu caso eu coloquei cnpj_cpfPatrocinador)excluir o que tinha já na controller
  
String tipo = request.getParameter("selecao");  //aqui pega a seleção radio
if (tipo.equals("cpf")){  //se radio for igual a cpf
    cnpj_cpf = request.getParameter("cpf");  // ele vai armazenar
} else if (tipo.equals("cnpj")){  //se for igaul a cnpj
    cnpj_cpf = request.getParameter("cnpj"); // faz o mesmo 
}  
System.out.println("cnpj_cpf = " + cnpj_cpf); // aqui pediu pra mostrar o valor

eu fiz a busca, arrumei no alterar.jsp a forma para trazer os valores,
só estou com um problema, ele não esta alterando, eu mudo os valores do cpf ou cnpj ele me da este erro:
INFO: Problema ao alterar Patrocinador! Erro: null

alterar.jsp

<td bgcolor ="white">CNPJ <font color="red">*</font> 
                    <%
                            Patrocinador patrocinador = (Patrocinador) request.getAttribute("patrocinador");
                            String isCNPJ = "";
                            String isCPF = "";
                            if (patrocinador.getCnpj_cpfPatrocinador().length() > 15){
                                isCNPJ = "checked";
                            } else {
                                isCPF = "checked";
                            }

                        %>
                    <input type="radio" name="selecao" value="cnpj_cpfPatrocinador" class="selecao" <%= isCNPJ %> />
                    CPF: <input type="radio" name="selecao" value="cnpj_cpfPatrocinador" class="selecao" <%= isCPF %> /><br />
                    <div id="localCampo"> 
                         <input type="text" value="${patrocinador.cnpj_cpfPatrocinador}">
                    </div>

                <tr>

joguei tbm o que fez para dentro da controller do alterar pra poder trazer

public class AlterarPatrocinador extends HttpServlet {

    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
      
        Integer idPatrocinador = Integer.parseInt(request.getParameter("idPatrocinador")); 
        String nomePatrocinador = (request.getParameter("nomePatrocinador"));
        String enderecoPatrocinador = (request.getParameter("enderecoPatrocinador"));
         String mensagem = null; 
        
        // foi que vc passou para fazer o cadastro, tenho que fazer aqui tbm pra poder fazer a alteração
        String cnpj_cpfPatrocinador = "";  
      
    String tipo = request.getParameter("selecao");  
    if (tipo.equals("cpf")){  
        cnpj_cpfPatrocinador = request.getParameter("cpf");  
    } else if (tipo.equals("cnpj")){  
        cnpj_cpfPatrocinador = request.getParameter("cnpj");  
    }  
    System.out.println("cnpj_cpf = " + cnpj_cpfPatrocinador); 
     
      // vou setar o objeto

    patrocinador.setIdPatrocinador(idPatrocinador);
        System.out.println(idPatrocinador);
        patrocinador.setNomePatrocinador(nomePatrocinador);
        System.out.println(nomePatrocinador);
        patrocinador.setEnderecoPatrocinador(enderecoPatrocinador);
        patrocinador.setCnpj_cpfPatrocinador(cnpj_cpfPatrocinador);
        System.out.println(cnpj_cpfPatrocinador);
try {
            GenericDAO dao = new PatrocinadorDAOImpl(); /*neste momento busco a conexão com o banco de dados*/
            if (dao.alterar(patrocinador)) {/*se for verdadeiro ele cadastra*/
                mensagem = "Patrocinador " + patrocinador.getNomePatrocinador() + " alterado com sucesso!";
            } else {
                mensagem = "Problemas ao alterar " + patrocinador.getNomePatrocinador() + " verifique os dados digitados!";
            }
            request.setAttribute("mensagem", mensagem);
            request.getRequestDispatcher("indexAdministrador.jsp").forward(request, response);/*seto um atributo na request, tenho que despachar o 
            atributo para algum lugar, retonar para a pagina de cadastro ou pra outra pagina*/

        } catch (Exception ex) {
            System.out.println("Problema no servlet ao alterar Patrocinador! Erro: " + ex.getMessage());
        }
    }
L

Quem chama o alterar.jsp?

O alterar espera um atributo do tipo patrocinador. Tanto que vc recupera via getAttribute ele…

Aonde ele é chamado, é que ta o problema.

N

achei onde esta o problema,
tenho um campo cidade que já esta cadastrado algumas cidades,
chamo as cidades num select,
este que esta me passando null.

Estou testando pra ver o erro…
no mais esta tudo certo…
vc me ajudou de mais
agradeço

Criado 17 de março de 2013
Ultima resposta 17 de mar. de 2013
Respostas 25
Participantes 2