2017-12-29 12 views
1

Ich möchte einen bestimmten Benutzer mit Hilfe eines materialisierten modalen Fensters zeigen, indem ich auf "Ansicht" button klicke. Ich versuche dies durch Ajax-Abfrage an meinen Controller zu machen. Auch ich habe einen Fehler: Es gab einen unerwarteten Fehler (Typ = Interner Serverfehler, Status = 500). Exception Auswertung Springels expression: "user.firstName" (Benutzer: 190)Wie man modales Fenster durch Einheit vom Steuerpult in Thymeleleaf durch Ajaxabfrage bevölkert

Tabelle:

<tr th:each="user : ${users}"> 
      <td th:text="${user.firstName}"></td> 
      <td th:text="${user.lastName}"></td> 
      <td th:text="${user.username}"></td> 
      <td> 
       <a th:onclick="'javascript:viewUser(\'' + ${user.id} +'\');'" class="btn-floating waves-effect waves-light yellow"><i class="material-icons">visibility</i></a> 
       <a href="#updateUser" class="btn-floating waves-effect waves-light blue btn modal-trigger"><i class="material-icons">edit</i></a> 
       <a th:href="${'/users/delete/' + user.id}" class="btn-floating waves-effect waves-light red"><i class="material-icons">delete</i></a> 
      </td> 
     </tr> 

Modal:

<div id="viewUser" class="modal modal-fixed-footer" th:fragment="view"> 
     <div class="modal-content"> 
      <h4>View User</h4> 
       <div class="row"> 
        <div class="col s12"> 
         <div class="row"> 
          <table> 
           <thead> 
           <tr> 
            <th></th> 
            <th></th> 
           </tr> 
           </thead> 
           <tbody> 
           <tr> 
            <td>First Name: </td> 
            <td th:text="${user.firstName}"></td> 
           </tr> 
           <tr> 
            <td>Last Name: </td> 
            <td th:text="${user.lastName}"></td> 
           </tr> 
           <tr> 
            <td>Username</td> 
            <td th:text="${user.username}"></td> 
           </tr> 
           </tbody> 
          </table> 
         </div> 
        </div> 
       </div> 
     </div> 
     <div class="modal-footer"> 
      <button class="modal-action modal-close waves-effect waves-light btn-floating red"><i class="material-icons">close</i></button> 
     </div> 
    </div> 

JS Funktion:

function viewUser(id) { 
    $.ajax({ 
     url: "https://stackoverflow.com/users/view/" + id, 
     success: function(response) { 
      console.log(response); 
      $('#viewUserHolder').html(response); 
      $('#viewUser').modal('open'); 
     } 
    }); 
} 

Verfahren die Steuerung:

@RequestMapping(value = "/view/{id}") 
public String view(@PathVariable("id") Integer id, ModelMap modelMap) { 
    User user = userRepository.findOne(id); 
    modelMap.addAttribute("user", user); 
    return "users :: view"; 
} 
+0

Aktualisieren Sie die Frage und posten Sie full stacktrace. Das Problem irgendwo in deinem Code. Es versucht, firstName des Benutzers zu erhalten, aber etwas stimmt nicht. Könnte sein, dass Benutzer null ist oder keine getFirstName() -Methode hat oder etwas in der Methode fehlschlägt. – StanislavL

+0

Ich habe es geschafft, mit diesem Fehler fertig zu werden. Ich bekomme richtige Daten in der Konsole, aber mein modales Fenster ist aus irgendeinem Grund leer. Könnten Sie mir helfen, eine Lösung dafür zu finden? Ich habe den Code aktualisiert, bitte überprüfen Sie ihn. Ich versuche dieses Tutorial zu verwenden https://qtzar.com/2017/03/24/ajax-and-thymeleaf-for-modal-dialogs/ –

Antwort

0

Problem gelöst durch Hinzufügen von $ ('# viewUser) .modal(). Das modale Fenster wollte nicht geöffnet werden.

function viewUser(id) { 
     $.ajax({ 
      url: "https://stackoverflow.com/users/view/" + id, 
      success: function(response) { 
       $('#viewUserHolder').html(response); 
       $('#viewUser').modal(); 
       $('#viewUser').modal('open'); 
      } 
     }); 
    }