Ao tentar alterar registro com JPA

7 respostas
jpajavamysqlhibernate
D

Tenho uma aplicação Java Spring MVC, com Hibernate e JPA e interface HTML.

Tenho dois formulários que dependem da classe Caderno e seus atributos.

No primeiro formulário eu insiro os dados de um novo Caderno, salvo no banco e é criado um novo ID para esse registro.

Quando faço uma pesquisa, no caso numeroCaderno=44, é exibido o segundo formulário, que vêm com alguns campos do primeiro formulário já preenchidos, mas desabilitados, e campos adicionais da classe Caderno habilitados para edição. Ou seja, nesse segundo formulário eu só vou adicionar mais informações ao mesmo registro que foi adicionado pelo primeiro formulário:

7 Respostas

darlan_machado

Você não está passando o id do objeto existente no momento da inserção, por isso ele cria um novo.

D

Boa tarde darlan, O problema é que quando clico no botão “Salvar” do segundo formulário, ele está criando um novo registro de Caderno, com um novo ID, ao invés de salvar as informações no mesmo ID criado pelo primeiro formulário.

Método alterar que é disparado ao clicar no botão “Salvar” do segundo formulário:

@RequestMapping(alterar)

public String alterar(Caderno objeto, Integer id, BindingResult result, Model model

) {
if (objeto.isStatus()) {
		List<Caderno> cadernos = dao.listar();
		//model.addAttribute("caderno", caderno);
		for (Caderno m : cadernos) {
			m.setStatus(false);
			dao.alterar(objeto, id);
		}
	}
		System.out.println("cadastro chegou no alterar");
		dao.alterar(objeto, id);

		return "public/sucessos";

}

Método alterar na classe DaoCaderno, que é chamado pelo método alterar que mostrei anteriormente:

@Override
public void alterar(Caderno objeto, Integer id) {

System.out.println("Entrando no metodo alterar do Dao");
	
	//entityManager.joinTransaction();


	if(id != null) {
	
	Caderno caderno = new Caderno();
 
	
	//caderno.getId();
		
	caderno.getCodigoFamiliar();			
	caderno.setCodigoFamiliar(String.valueOf(objeto.getCodigoFamiliar()));
	
	caderno.getAvaliadoPor();
	caderno.setAvaliadoPor(String.valueOf(objeto.getAvaliadoPor()));
	
	caderno.getObservacoes();
	caderno.setObservacoes(String.valueOf(objeto.getObservacoes()));


    caderno.getData();
	caderno.setData(String.valueOf(objeto.getData()));

	
	caderno.getNis();
	caderno.setNis(String.valueOf(objeto.getNis()));
	
	entityManager.find(Caderno.class, new Long(id)); 
	
	

	
	
    }
	System.out.println("Fim do metodo Dao");
}

-------

Este é o meu codigo, como voce pode ver eu apenas quero inserir novos dados estes como no DAO, sem atualizar o ID, por ex fiz um cadastro com ID = 1 e o numeroCaderno = 22 se faço a pesquisa ele retorna com os dados preechidos e quando preencho ele cae esta nesta tela do alterar tanto do controller e depois no DAO e quando vou salvar ele passa para o ID=2 consegue entender, e isso que nao quero, quero que quando inserir os novos dados no metodo alterar é para apenas inserir os dados e quando eu fizer a pesquisa no caso o " numeroCaderno=22" ele retornar todos os dados prenchidos do formulario 1 e 2, consegue entender.

D

Para voce entender melhor ainda segue o codigo do Formulario 1 sem problema algum.

Metodo Salvar na Classe Controller.

@RequestMapping("salvar")
public String inserir(@Valid Caderno objeto, Integer id, BindingResult result, Model model, Long numeroCaderno) {
	if (objeto.isStatus()) {
		List<Caderno> cadernos = dao.listar();
		for (Caderno m : cadernos) {
			m.setStatus(false);
	        dao.inserir(objeto);
			//dao.alterar(caderno);

			if (result.hasErrors()) {
				return "public/inicio";
			}

		
		}

		model.addAttribute("mensagem", ""); 
	}

		dao.inserir(objeto);
		System.out.println("cadastro chegou denovo no inserir");
		return "public/sucesso"; 


	}

Metodo buscarNumeroCaderno na Classe DAO, aqui ele busca o numero digitado que eu cadastrei, abre um novo formulario com estes dados preenchidos e desabilitados e logo em baixo e segundo formulario para inserir os novos dados no caso “alterar” que postei logo acima.

<a class="mention" href="/u/override">@Override</a>

public List buscarNumeroCaderno(String numeroCaderno){

TypedQuery query = entityManager.createQuery(“SELECT d FROM Caderno d WHERE d.numeroCaderno = :numeroCaderno order by dataRecebido desc”, Caderno.class);

query.setParameter(“numeroCaderno”, numeroCaderno);

return query.getResultList();

}


As paginas jsp.

Formulario = 1

<form accept-charset="utf-8" method="post" action='<c:url value="/busca/salvar"></c:url>'
class="form-horizontal" style="margin-top: 20px;">
			  
	  	  <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="id"><span class="required"></span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <input type="hidden" id="id" required class="form-control col-md-7 col-xs-12" placeholder="Id">
                    </div>
                  </div>  	   
			  <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="numeroCaderno">TID/SEI/SIMPROC: <span class="required"></span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <input  type="text" name="numeroCaderno" required class="form-control col-md-7 col-xs-12">
                    </div>
                  </div>
                  <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="cras" >Unidade de Cadastro (CRAS/CREAS/CIC): </label>
                          <input type="hidden"  required class="form-control col-md-7 col-xs-12">
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <select class="select2_group form-control" name="cras">
                        <optgroup label="Centro">     
                          <option value="CGB">CGB</option>
                         
                          <option value="Centro Pop Barra Funda">Centro Pop Barra Funda</option>
                          <option value="Centro Pop Bela Vista">Centro Pop Bela Vista</option>
                          <option value="Descomplica">Descomplica</option>
                          <option value="Saúde">Saúde</option>
                          <option value="Sé"></option>
                        </optgroup>
   
                      </select>
                    </div>
                  </div>
                  <div class="form-group" lang="pt-br">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="dataRecebido">Recebido em: </label> <!--<span class="required">  <fmt:formatDate value="${aviso.data}" pattern="dd/MM/yyyy"/> </span> --> 
                    
                    <div class="col-md-6 col-sm-6 col-xs-12" lang="pt-br">
                      <input  id="dataRecebido"  class="date-picker form-control col-md-7 col-xs-12" type="text" name="dataRecebido" lang="pt-br">
                    </div>
                  </div> 
                    <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="recebidoPor">Recebido por: </label> <span class="required"></span>
                        <input type="hidden">  
                  <div class="col-md-6 col-sm-6 col-xs-12">
                      <input  type="text" name="recebidoPor" required class="form-control col-md-7 col-xs-12" placeholder="Insira o Nome">
                    </div>
                  </div>
                  </br>
		       <div class="form-group" align="center">
                    <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
                       <input type="submit"  value="Inserir" class="btn btn-primary">
                    </div>
                  </div>
              </form>
	     </div>
      </div>
   </div>
  </div>
        <div class="row">
          <div class="col-md-12">
            <div class="x_panel">
              <div class="x_title">
                <h2><small></small></h2>
                <div class="filter">
                </div>
                <div class="clearfix"></div>
              </div>
              <div class="x_content">
                <div class="col-md-12 col-sm-12 col-xs-12">
                  <div class="demo-container" style="height:260px">
                    <div id="placeholder33x" class="demo-placeholder"></div>
                  </div>

                </div>

              </div>
            </div>
          </div>
        </div>
   </div>

    <!-- /page content -->
    
<!-- bootstrap-daterangepicker -->
<script>
  $(document).ready(function() {
    $('#dataRecebido').daterangepicker({
      singleDatePicker: true,
      calender_style: "picker_4",
      format: 'DD/MM/YYYY',
      language: 'pt-BR'
     
     
      
    }, function(start, end, label) {
      console.log(start.toISOString(), end.toISOString(), label);
    });
  });
  
  (function ($) {
	    $.daterangepicker.regional['pt-BR'] = {
	        closeText: 'Fechar',
	        prevText: '<Anterior',
	        nextText: 'Seguinte',
	        currentText: 'Hoje',
	        monthNames: ['Janeiro', 'Fevereiro', 'Mar&ccedil;o', 'Abril', 'Maio', 'Junho',
	        'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
	        monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
	        'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
	        dayNames: ['Domingo', 'Segunda-feira', 'Ter&ccedil;a-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'S&aacute;bado'],
	        dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'S&aacute;b'],
	        dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'S&aacute;b'],
	        weekHeader: 'Sem',
	        dateFormat: 'dd/mm/yyyy',
	        firstDay: 0,
	        isRTL: false,
	        showMonthAfterYear: false,
	        yearSuffix: ''
	    };
	    $.daterangepicker.setDefaults($.daterangepicker.regional['pt-BR']);
	});
  
</script>
<!-- /bootstrap-daterangepicker -->

<!-- /Starrr -->
    
	      </div>
     </div>

Formulario = 2

<div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12"><span class="required"></span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <input type="hidden"  required class="form-control col-md-7 col-xs-12">
                    </div>
                  </div> 	   
			         <div class="form-group" style="visibility: hidden; ">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12">Numero Caderno </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   required="required" disabled="disabled" type="hidden" value="${caderno.id }"  required class="form-control col-md-7 col-xs-12"> 
                    </div>
                  </div>  
			         <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12">TID/SEI/SIMPROC: </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input name="numeroCaderno"  required="required" disabled="disabled" type="text" value="${caderno.numeroCaderno }"  required class="form-control col-md-7 col-xs-12"> 
                    </div>
                  </div>
                 <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="cras">Unidade de Cadastro (CRAS/CREAS/CIC): </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   name="cras"  required="required" type="text" disabled="disabled" value="${caderno.cras }"  required class="form-control col-md-7 col-xs-12" > 
                    </div>
                  </div>
   			        <div class="form-group" lang="pt-br">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="dataRecebido">Recebido em *</label> <!--<span class="required">  <fmt:formatDate value="${aviso.data}" pattern="dd/MM/yyyy"/> </span> -->  
                    <div class="col-md-6 col-sm-6 col-xs-12" lang="pt-br">
                      <input  disabled="disabled" value="${caderno.dataRecebido }"  class="date-picker form-control col-md-7 col-xs-12" type="text" name="dataRecebido" lang="pt-br">
                    </div>
                  </div>  
                    <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="recebidoPor">Recebido por: </label> <span class="required"></span>
                        <input type="hidden">  
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   name="recebidoPor"  required="required" type="text" disabled="disabled" value="${caderno.recebidoPor }"  required class="form-control col-md-7 col-xs-12" > 
                    </div>
                  </div>
                   </c:forEach>
              </form>
	     </div>
      </div>
   </div>
  </div>
     <div class="row"> 
          <div class="col-md-12 col-sm-12 col-xs-12">
            <div class="x_panel">
              <div class="x_title">
                <h2>Avaliar Caderno</h2>
                <div class="clearfix"></div>
              </div>
              <div class="x_content">
              <br />
                   
		  <form accept-charset="utf-8" action='<c:choose><c:when test="${not empty url }"><c:url value="/busca/alterar"></c:url></c:when> <c:otherwise>${url }</c:otherwise></c:choose>'
				class="form-horizontal" style="margin-top: 20px;" method="get">
		     <c:forEach items="${cadernos}" var="caderno" begin="0" end="0">
		     
	 	         <div class="form-group" style="visibility: hidden; ">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12">Numero Caderno </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   required="required" disabled="disabled" type="hidden" required class="form-control col-md-7 col-xs-12"> 
                    </div>
                  </div>
            <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="avaliadoPor">Avaliado por: </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   name="avaliadoPor" required="required" id="avaliadoPor"  type="text"    required class="form-control col-md-7 col-xs-12" > 
                    </div>
                  </div>
               <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="codigoFamiliar">Código Familiar: </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   name="codigoFamiliar" id="codigoFamiliar" required="required" type="text"   required class="form-control col-md-7 col-xs-12" > 
                    </div>
                   </div>
               <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="nis">NIS: </label> <span class="required"></span>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input   name="nis" required="required" type="text" id="nis"   required class="form-control col-md-7 col-xs-12" > 
                    </div>
                  </div>
       		      <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="data">Avaliado em *</label> 
                    <div class="col-md-6 col-sm-6 col-xs-12">
                     <input id="data"  class="date-picker form-control col-md-7 col-xs-12" required type="text" name="data"> 
                    </div>
                  </div>  
               <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="pendenciaDocumentacao">Pendência na documentação: </label> <span class="required"></span>
                      <div class="checkbox">
                        <label>
                          <input type="checkbox" name="cpf">CPF /
                        </label>
                        <label>
                          <input type="checkbox" name="rg">RG /
                        </label>
                        <label>
                          <input type="checkbox"  name="ctps">CTPS /
                        </label>
                        <label>
                          <input type="checkbox"  name="certidaoNascimento">Certidão de Nascimento
                        </label>
                      </div>
                  </div>
               <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="pendenciaFormulario">Pendência no Formulário: </label> <span class="required"></span>
                     <input type="hidden">  
                      <div class="checkbox">
                        <label>
                          <input type="checkbox"  name="fichaExclusao">Ficha de Exclusão /
                        </label>
                        <label>
                          <input type="checkbox"  name="fichaAveriguacao">Ficha de Averiguação /
                        </label>
                        <label>
                          <input type="checkbox"  name="suplementar">Suplementar 1 /
                        </label>
                        <label>
                          <input type="checkbox"  name="suplementarDois">Suplementar 2
                        </label>
                      </div>
                  </div>
               <div class="form-group">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="pendenciaAssinatura">Pendência na Assinatura: </label> <span class="required"></span>
                      <div class="checkbox">
                        <label>
                          <input type="checkbox"  name="entrevistador">Entrevistadora(or) Social /
                        </label>
                        <label>
                          <input type="checkbox" name="responsavelFamiliar">Responsável Familiar
                        </label>
                      </div>
                  </div>
		    <div class="form-group">
                  <label class="control-label col-md-3 col-sm-3 col-xs-12" for="observacoes">Observações: </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                       <input type="text"  required="required" id="observacoes"  name="observacoes"  required class="form-control col-md-7 col-xs-12"> 
                    </div>
                  </div>
		        <div class="form-radio">
                    <label class="control-label col-md-3 col-sm-3 col-xs-12" for="status">Status: <span class="required"></span>
                    </label>
                    <div class="col-md-6 col-sm-6 col-xs-12">
                      <div class="radio">
                        <label>
                          <input type="radio" id="status1" required="required" name="status1"<c:if test="${caderno.status }">checked="checked"</c:if> /> Cadastro Finalizado
                        </label>
                      </div>
                      <div class="radio">
                        <label>
                          <input type="radio" id="status1" required="required" name="status1" <c:if test="${caderno.status }">checked="checked"</c:if> /> Cadastro Pendente
                        </label>
                      </div>
                    </div>
                  </div>  
		       <div class="form-group" align="center">
                    <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
                       <input type="submit"  value="Salvar" class="btn btn-primary">
                    </div>
                  </div>
                </c:forEach>
              </form>
	     </div>
      </div>  
   </div>
  </div>
<!-- /page content -->
    
<!-- bootstrap-daterangepicker -->
<script>
  $(document).ready(function() {
    $('#data').daterangepicker({
      singleDatePicker: true,
      calender_style: "picker_4",
      format: 'DD/MM/YYYY',
      language: 'pt-BR'
     
     
      
    }, function(start, end, label) {
      console.log(start.toISOString(), end.toISOString(), label);
    });
  });
  
  (function ($) {
	    $.daterangepicker.regional['pt-BR'] = {
	        closeText: 'Fechar',
	        prevText: '<Anterior',
	        nextText: 'Seguinte',
	        currentText: 'Hoje',
	        monthNames: ['Janeiro', 'Fevereiro', 'Mar&ccedil;o', 'Abril', 'Maio', 'Junho',
	        'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro'],
	        monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
	        'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],
	        dayNames: ['Domingo', 'Segunda-feira', 'Ter&ccedil;a-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'S&aacute;bado'],
	        dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'S&aacute;b'],
	        dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'S&aacute;b'],
	        weekHeader: 'Sem',
	        dateFormat: 'dd/mm/yyyy',
	        firstDay: 0,
	        isRTL: false,
	        showMonthAfterYear: false,
	        yearSuffix: ''
	    };
	    $.daterangepicker.setDefaults($.daterangepicker.regional['pt-BR']);
	});
  
  
 // jQuery('document').ready(function() {
//	  jQuery('#ajax_form').submit(function() {
//	    var dados = jQuery(this).serialize();
	    //aqui voce pega o conteudo do atributo action do form
//	    var url = $(this).attr('action');
//	    jQuery.ajax({
//	      type: "POST",
// 	      url: <a href="http://10.90.0.45/controledecadernos/busca/alterar">http://10.90.0.45/controledecadernos/busca/alterar</a>”,

// 	      data: dados,

// 	      success: function(response) {

//‘response’ é a resposta do servidor

//	        alert(response);

// 	      }

// 	    });
// 	    return false;

// 	  });

// 	});
</script>
<!-- /bootstrap-daterangepicker -->

<!-- /Starrr -->
    
	      </div>
     </div>

Esta é a minha pagina como voce pode ver neste 2 formualario tem 2 forms que são 2 formulario que abre na mesma tela, e neste 2 formulario o problema de tudo, aonde apenas quero inserir os dados sem atualizar o ID?

darlan_machado

Veja, o processo de atualização do JPA depende de 2 coisas:
1 - Uma transação aberta a partir de uma entidade
2 - Um objeto com um ID já constando do banco de dados e gerenciado pelo JPA (não adianta fazer um insert na mão, o JPA precisaria ser recarregado)

Ou seja, você teria que recuperar o objeto:

entityManager.find(Caderno.class, new Long(id));

Depois, você deve pegar cada atributo alterado e setar no objeto em questão:

caderno.setBlablabla(cadernoAlterado.getBlablabla());

Aí, basta invocar o método persist ou o método merge:

entityManager.persist(caderno); //aquele mesmo recuperado anteriormente

Ou

entityManager.merge(caderno); //aquele mesmo recuperado anteriormente

Para saber mais, dá uma olhada na documentação do merge e do persist

D

Olá Darlan, eu fiz deste jeito mais continua ainda não salvando os novos dados inseridos no banco.

if(id != null) {
	entityManager.find(Caderno.class, new Long(id));
	
	Caderno caderno = new Caderno();

	caderno.getId();
	
	caderno.getNumeroCaderno();
	
           	caderno.getCodigoFamiliar();			
	caderno.setCodigoFamiliar(String.valueOf(objeto.getCodigoFamiliar()));
	 

	caderno.getAvaliadoPor();
	caderno.setAvaliadoPor(String.valueOf(objeto.getAvaliadoPor()));

            entityManager.persist(caderno);

No exemplo que você me passou você me diz para eu pegar o atributo e setar qual a diferença do seu exemplo com este que estou lhe mostrando ambos não fazem a mesma coisa. Eu fiz desta forma chamei o find e depois o persist, como esta no ex que você citou, e mesmo assim não esta salvando os novos dados no banco. Fiz apenas com dois AvaliadoPor e CodigoFamiliar para o codigo não ficar extenso.

darlan_machado

Eu realmente não entendo a necessidade disso.

Veja o que eu sugeri. Por exemplo, caso a classe Caderno possua o atributo blablabla e este tenha sido alterado, você inclui o valor novo no objeto que foi obtido do banco:

Caderno cadernoGravadoNoBD = entityManager.get(new Long(id));
cadernoGravadoNoBD.setBlablabla(cadernoQueEnvieiAgora.getBlablabla());

Invocar o getter antes de setar o valor é algo que nunca vi e não sei para que está fazendo.
Está seguindo algum tutorial? Apostila? Vídeo aula?

D

Então se esta se referindo do getId e getNumeroCaderno é apenas para trazer na tela do segundo formulario vem preenchidos sem funcionalidade alguma apenas para trazer.

Este é o formulario a ser desenvolvido o primeiro esta prenchido e trazendo o resultado, desabilitado, o ID do primeiro formulario escondi ele usando hidden, só para avisar mais o ID é 13 o mesmo do segundo formulario que mostra o ID=13 para informar, já no segundo formulario eu trago o ID e o NumeroCaderno desabilitado sem interferência alguma o resto tenho que preencher como falei e quando preencher e fazer uma nova busca tem que trazer todos os dados do formulario, no formulario um não se meche porque já esta salvo no banco, desabilitado não pode alterar, o que muda é o segundo formulario aonde eu apenas acrescento novos dados e mando salvar, e quando salvar tem que salvar com o mesmo ID no caso ID=13 do primeiro formulario e quando eu fizer a busca pelo numeroCaderno no caso=44 tem que trazer os dados atualizados sem alterar o ID, tem que trazer esta pagina inteira preenchida, por enquanto não esta salvando os dados do segundo formulario junto ao formulario um, respondendo a sua pergunta não to seguindo nada não.

Criado 22 de outubro de 2018
Ultima resposta 23 de out. de 2018
Respostas 7
Participantes 2