2017-04-20 6 views
0

Je suis un débutant sur spring-boot et je construis cet outil à des fins d'apprentissage basé sur la documentation et des tutoriels que j'ai trouvé. J'ai donc construit du code en utilisant des dépôts CRUD provenant du paquetage org.springframework.data.repository. Je suis venu à la partie de mettre à jour un enregistrement en utilisant cette RESTservice ImplMettre à jour le démarrage de démarrage CRUD ne fonctionne pas

public boolean modifyVacancy(Vacancy vacancy){ 
    boolean passedProcessFlow = false; 
    if(vacancyRepository.exists(vacancy.getIdVacancy())){ 
     vacancyRepository.save(vacancy); 
     passedProcessFlow = true; 
    } 
    return passedProcessFlow; 
} 

qui est appelé à partir du contrôleur ici:

@RequestMapping(value="/vacancies/edit/{id}", method = RequestMethod.POST) 
public String editVacancy(@PathVariable Integer id, Model model, 
          @ModelAttribute("vacancyEdit") Vacancy vacancy){ 
    System.out.println("<<<<<<<<<<<<<<<<<<<<<IT PASSED THROUGH HERE>>>>>>>>>>>>>>>>>>>>>>>>>"); 
    //modelAndView.setViewName("vacancies"); 
    vacancyService.modifyVacancy(vacancy); 

    return "redirect:vacancies"; 
} 

Et last but not least mon thymeleaf html:

<!DOCTYPE html> 

<meta name="viewport" content="width=device-width, initial-scale=1"/> 
    <script th:src="@{/webjars/jquery/2.1.4/jquery.min.js}"></script> 
    <script src="../static/js/bootstrap.min.js"></script> 
    <link th:href="@{/webjars/bootstrap/3.3.4/css/bootstrap.min.css}" 
      rel="stylesheet" media="screen" /> 
    <link th:href="@{static/css/login.css}" 
      rel="stylesheet" media="screen" />   
    <script src="../static/js/login.js"></script> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.4.0/bootbox.min.js"></script> 
    <link href="../static/css/guru.css" 
      th:href="@{css/guru.css}" rel="stylesheet" media="screen"/> 
    <link href="../static/css/guru.css" 
      th:href="@{css/guru.css}" rel="stylesheet" media="screen"/> 

    <script> 
      $(document).ready(function() { 

       var btnOpen = $('#btnOpen'), 
        btnOpenEdit = $('#btnOpenEdit'), 
        btnOnInterviewEdit = $('#btnOnInterviewEdit'), 
        btnOnInterview = $('#btnOnInterview'), 
        btnCloseEdit = $('#btnClosedEdit') 
        btnClose = $('#btnClosed') 

        $("#vacancyStatus").val("1"); 



       $("#btnOpen").click(function() { 
       $("#vacancyStatus").val("1"); 
        $(this).toggleClass('btn-default btn-info') 
        btnOnInterview.removeClass('btn-warning').addClass('btn-default') 
        btnClose.removeClass('btn-danger').addClass('btn-default') 
        }); 

       $("#btnOpenEdit").click(function() { 
       $("#vacancyStatusEdit").val("1"); 
        $(this).toggleClass('btn-default btn-info') 
        btnOnInterviewEdit.removeClass('btn-warning').addClass('btn-default') 
        btnCloseEdit.removeClass('btn-danger').addClass('btn-default') 
        }); 

       $("#btnOnInterview").click(function() { 
        $("#vacancyStatus").val("2"); 
        $(this).toggleClass('btn-default btn-warning') 
        btnOpen.removeClass('btn-info').addClass('btn-default') 
        btnClose.removeClass('btn-danger').addClass('btn-default') 
        }); 

       $("#btnOnInterviewEdit").click(function() { 
        $("#vacancyStatusEdit").val("2"); 
        $(this).toggleClass('btn-default btn-warning') 
        btnOpenEdit.removeClass('btn-info').addClass('btn-default') 
        btnCloseEdit.removeClass('btn-danger').addClass('btn-default') 
        }); 

       $("#btnClosed").click(function() { 
        $("#vacancyStatus").val("3"); 
        $(this).toggleClass('btn-default btn-danger') 
        btnOnInterview.removeClass('btn-warning').addClass('btn-default') 
        btnOpen.removeClass('btn-info').addClass('btn-default') 
        }); 

       $("#btnClosedEdit").click(function() { 
        $("#vacancyStatusEdit").val("3"); 
        $(this).toggleClass('btn-default btn-danger') 
        btnOnInterviewEdit.removeClass('btn-warning').addClass('btn-default') 
        btnOpenEdit.removeClass('btn-info').addClass('btn-default') 
        }); 

       $('#search-form').submit(function(){ 
         var formAction = $("#selectsearch").val() == "people" ? "user" : "content"; 
         $("#search-form").attr("action", "/search/" + formAction); 
        }); 

       $('.editButton').on('click', function() { 
         // Get the record's ID via attribute 
         var id = $(this).attr('data-id'); 

         $.ajax({ 
          url: 'http://localhost:8080/api/vacancies/'+ id, 
          method: 'GET' 
         }).success(function(response) { 
          // Populate the form fields with the data returned from server 
          $('#vacancyEditForm') 
           .find('[id="idVacancyEdit"]').val(id).end() 
           .find('[id="positionTitleEdit"]').val(response.jobPositionTitle).end() 
           .find('[id="skillsDescriptionEdit"]').val(response.jobPositionSkillDescription).end() 
           .find('[id="vacancySlotsEdit"]').val(response.vacancySlots).end() 
           .find('[id="vacancyStatusEdit"]').val(response.vacancyState).end() 
           .prop("action", "/vacancies/edit/"+id) 

          // Show the dialog 
          bootbox 
           .dialog({ 
            title: 'Edit Vacancy', 
            message: $('#vacancyEditForm'), 
            show: false // We will show it manually later 
           }) 
           .on('shown.bs.modal', function() { 
            $('#vacancyEditForm') 
             .show()        // Show the login form 
             //.formValidation('resetForm'); // Reset form 
           }) 
           .on('hide.bs.modal', function(e) { 
            // Bootbox will remove the modal (including the body which contains the login form) 
            // after hiding the modal 
            // Therefor, we need to backup the form 
            $('#vacancyEditForm').trigger("reset"); 
            $('#vacancyEditForm').hide().appendTo('body'); 
            //$('#vacancyEditForm').hide(); 
           }) 
           .modal('show'); 
         }); 
        }); 





     }); 
    </script> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 

    <title>Vacancies List</title> 
</head> 
<body> 

    <div class="container"> 

     <div > 
      <h2>Vacancy List</h2> 
      <br></br> 
      <br></br> 

      <div class="col col-xs-6 text-left"> 
       <a data-toggle="modal" data-target="#modalVacancyInput" class="btn icon-btn btn-success" href="#"><span class="glyphicon btn-glyphicon glyphicon-plus img-circle text-success"></span>Add New Vacancy</a> 
      </div> 
      <br></br> 
      <br></br> 
      <br></br> 
      <br></br> 

      <table class="table table-striped"> 
       <tr> 
        <th>Id</th> 
        <th>Title</th> 
        <th>Skills Description</th> 
        <th>View</th> 
        <th>Edit</th> 
        <th>Delete</th> 

       </tr> 
       <tr th:each="vacancyO : ${vacancies}"> 
        <td th:text="${vacancyO.idVacancy}">Vacancy Id</td> 
        <td th:text="${vacancyO.jobPositionTitle}">Job Title</td> 
        <td th:text="${vacancyO.jobPositionSkillDescription}">price</td> 
        <td><a class="btn btn-success" th:href="@{'/vacancy/id='+${vacancyO.idVacancy}}"><span class="glyphicon glyphicon-eye-open">View</span></a></td> 
        <!--td><a class="btn btn-warning" th:attr="data-id=${vacancyO.idVacancy}" name="editButton" th:href="@{'/vacancy/edit/id='+${vacancyO.idVacancy}}"><span class="glyphicon glyphicon-edit">Edit</span></a></td--> 
        <td><button class="btn btn-warning editButton" th:attr="data-id=${vacancyO.idVacancy}" ><span class="glyphicon glyphicon-edit">Edit</span></button></td> 
        <td><a class="btn btn-danger" th:href="@{'/vacancy/delete/id='+${vacancyO.idVacancy}}"><span class="glyphicon glyphicon-trash">Delete</span></a></td> 
       </tr> 
      </table> 

     </div> 
    </div> 


    <div id="modalVacancyInput" class= "modal fade in" role="dialog"> 
      <div class="modal-dialog" role="document"> 
       <div class="modal-content"> 
        <div class="modal-header"> 
         <h1 class="modal-title">Vacancy</h1> 
        </div> 
        <div class="modal-body"> 
         <form th:action="@{/vacancies}" id="vacancyForm" role="form" method="post" th:object="${vacancy}" class="form-horizontal"> 
          <fieldset> 
           <!-- Text input--> 
           <!--div class="form-group"> 
            <label class="col-md-4 control-label" for="idVacancy">Id Vacancy</label> 
            <div class="col-md-4"> 
             <input id="idVacancy" name="idVacancy" type="text" placeholder="Id. Vacancy" class="form-control input-md"/> 
             <span class="help-block">help</span> 
            </div> 
           </div--> 

           <!-- Text input--> 
           <div class="form-group"> 
            <label class="col-md-4 control-label" for="positionTitle">Position Title</label> 
            <div class="col-md-4"> 
             <input id="positionTitle" th:field="*{jobPositionTitle}" name="positionTitle" type="text" placeholder="Position title" class="form-control input-md" required=""/> 
             <span class="help-block">help</span> 
            </div> 
           </div> 

           <!-- Textarea --> 
           <div class="form-group"> 
            <label class="col-md-4 control-label" for="skillsDescription">Skills Description</label> 
            <div class="col-md-4">      
             <textarea class="form-control" id="skillsDescription" th:field="*{jobPositionSkillDescription}" name="skillsDescription">Detail the required skills</textarea> 
            </div> 
           </div> 

           <!-- Text input--> 
           <div class="form-group"> 
            <label class="col-md-4 control-label" for="vacancySlots">Positions to open</label> 
            <div class="col-md-4"> 
             <input id="vacancySlots" th:field="*{vacancySlots}" name="vacancySlots" type="number" placeholder="1" class="form-control input-md" required=""/> 
             <span class="help-block">help</span> 
            </div> 
           </div> 
           <input value="1" type="hidden" id="vacancyStatus" th:field="*{vacancyState}"/> 
           <!-- Text input--> 
           <div class="form-group"> 
            <label class="col-md-4 control-label">Status</label> 
            <div class="btn-group-lg" align="left"> 
             <button type="button" id="btnOpen" value="Opened" class="btn btn-info btn-circle btn-lg"><i class="glyphicon glyphicon-ok" ></i></button> 
             <button type="button" id="btnOnInterview" value="OnInterview" class="btn btn-default btn-circle btn-lg"><i class="glyphicon glyphicon-warning-sign"></i></button> 
             <button type="button" id="btnClosed" value="Closed" class="btn btn-default btn-circle btn-lg"><i class="glyphicon glyphicon-remove"></i></button> 
            </div> 
           </div> 


           <div class="modal-footer"> 
            <button type="button" class="btn btn-default" 
              data-dismiss="modal"> 
             Close 
            </button> 
            <button type="submit" class="btn btn-primary"> 
             Save changes 
            </button> 
           </div> 



          </fieldset> 
         </form> 
        </div> 


       </div><!-- /.modal-content --> 
      </div><!-- /.modal-dialog --> 
     </div><!-- /.modal --> 

    <div id="modalVacancyEdit" class= "modal fade in" role="dialog"> 
     <div class="modal-dialog" role="document"> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <h1 class="modal-title">Vacancy</h1> 
       </div> 
       <div class="modal-body"> 
        <form id="vacancyEditForm" role="form" th:method="POST" th:object="${vacancyEdit}" class="form-horizontal"> 
         <fieldset> 
          <!-- Text input--> 
          <div class="form-group"> 
           <label class="col-md-4 control-label" for="idVacancyEdit">Id Vacancy</label> 
           <div class="col-md-4"> 
            <input id="idVacancyEdit" th:field="*{idVacancy}" name="idVacancy" type="text" placeholder="Id. Vacancy" class="form-control input-md" disabled="true"/> 
           </div> 
          </div> 

          <!-- Text input--> 
          <div class="form-group"> 
           <label class="col-md-4 control-label" for="positionTitleEdit">Position Title</label> 
           <div class="col-md-4"> 
            <input id="positionTitleEdit" th:field="*{jobPositionTitle}" name="positionTitle" type="text" placeholder="Position title" class="form-control input-md" required=""/> 
            <span class="help-block">help</span> 
           </div> 
          </div> 

          <!-- Textarea --> 
          <div class="form-group"> 
           <label class="col-md-4 control-label" for="skillsDescriptionEdit">Skills Description</label> 
           <div class="col-md-4"> 
            <textarea class="form-control" id="skillsDescriptionEdit" th:field="*{jobPositionSkillDescription}" name="skillsDescription">Detail the required skills</textarea> 
           </div> 
          </div> 

          <!-- Text input--> 
          <div class="form-group"> 
           <label class="col-md-4 control-label" for="vacancySlotsEdit">Positions to open</label> 
           <div class="col-md-4"> 
            <input id="vacancySlotsEdit" th:field="*{vacancySlots}" name="vacancySlots" type="number" placeholder="1" class="form-control input-md" required=""/> 
            <span class="help-block">help</span> 
           </div> 
          </div> 
          <input value="1" type="hidden" id="vacancyStatusEdit" th:field="*{vacancyState}"/> 
          <!-- Text input--> 
          <div class="form-group"> 
           <label class="col-md-4 control-label">Status</label> 
           <div class="btn-group-lg" align="left"> 
            <button type="button" id="btnOpenEdit" value="Opened" class="btn btn-info btn-circle btn-lg"><i class="glyphicon glyphicon-ok" ></i></button> 
            <button type="button" id="btnOnInterviewEdit" value="OnInterview" class="btn btn-default btn-circle btn-lg"><i class="glyphicon glyphicon-warning-sign"></i></button> 
            <button type="button" id="btnClosedEdit" value="Closed" class="btn btn-default btn-circle btn-lg"><i class="glyphicon glyphicon-remove"></i></button> 
           </div> 
          </div> 


          <div class="modal-footer"> 
           <button type="button" class="btn btn-default" 
             data-dismiss="modal"> 
            Close 
           </button> 
           <button type="submit" class="btn btn-primary"> 
            Save changes 
           </button> 
          </div> 



         </fieldset> 
        </form> 
       </div> 


      </div><!-- /.modal-content --> 
     </div><!-- /.modal-dialog --> 
    </div><!-- /.modal --> 

</body> 

Je reçois à courir le créer bien, mais quand je viens à la partie d'utiliser le bouton Modifier (pour l'édition d'un enregistrement), qui affiche un modal bootstrap qui enveloppe sous forme « vacancyEditForm », et javascript trouvé dans l'exemple précédent change le formulaire.action à un chemin qui devrait être capturé par mon contrôleur dans la méthode editVacancy ............... mais n'est pas !! et il y a probablement quelque chose de stupide qui me manque, mais je suis désemparé maintenant ... des pensées?

+0

Il n'y a pas d'action pour votre formulaire modalVacancyEdit. – jmw5598

+0

Je l'ai ajouté dans le javascript en utilisant jquery avec .prop ("action", "/ vacancies/edit /" + id). En outre, lorsque j'exécute l'inspecteur DOM dans Chrome, le formulaire a sa propre action. –

Répondre

0

Votre code JS fait un GET, le code Spring est à l'écoute d'un POST. Ainsi, l'action du contrôleur ne sera pas déclenchée. Changez le JS pour faire un POST.

+0

Salut John! J'apprécie votre temps pour faire une contribution. Le javascript AJAX fait un GET juste pour remplir simplement le modal. Je l'ai déjà changé pour POST et ne montre même pas le modal ........ était-il là où vous suggérez le changement, ou ailleurs? L'autre problème est que la méthode du formulaire modal est POST .........: '( –