2017-09-15 3 views
0

Ich versuche Thymeleaf Fragmente mit Ajax auf mein Projekt zu verwenden, und ich habe diese Methode auf mein Controller:Thymeleaf mit Ajax nicht richtig funktioniert

public def displayInfo(Model model) { 
    log.info("Guests method!") 
    model.addAttribute("content", "testing ajax"); 
    "fragments/content::form-basic"; 
} 

Und ich erhalte diese Mitteilung vor der Ausführung der Anwendung:

WARNING: The [displayInfo] action in [ca.capilanou.hrpay.workload.NonInstructionalWorkloadController] accepts a parameter of type [org.springframework.ui.Model]. Interface types and abstract class types are not supported as command objects. This parameter will be ignored. 

    public def displayInfo(Model model) { 
    ^

auf der hTML, wo ich das Fragment von ajax hinzufügen will, muss ich dies nur für die Prüfung:

<button id="bt1" onclick="$('#content').load('/nonInstructionalWorkload/displayInfo');">Load Frag 1</button> 
<div id="content"></div> 

Was passiert ist, dass ich die "Gäste Methode" bekomme! Meldung auf der Konsole, was bedeutet, dass sie die Steuerung ist erreicht, aber wenn es versucht zu tun:

model.addAttribute("content", "testing ajax"); 

Ich erhalte eine Nullpointer weil der Modellparameter null kommt. Also habe ich versucht, diese Zeile zu kommentieren und nur das Fragment zurückgeben, das ich anzeigen möchte. Dieses ist das Fragment ich habe:

<th:block th:fragment="content" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> 
    <div th:text="${content}"></div> 
</th:block> 

Ich habe versucht, die $ zu setzen {content} Text hart codiert, wenn die model.addAttribute Linie zu kommentieren, aber ich bin nicht alles immer wieder auf meinem Bildschirm.

Was muss ich tun, um die "WARNUNG", die ich bekomme, zu beheben und auch das Fragment an der richtigen Stelle sehen zu können?

Antwort

0

konnte ich es auf diese Weise lösen:

Statt der Verwendung dieser Methode:

public def displayInfo(Model model) { 
    log.info("Guests method!") 
    model.addAttribute("content", "testing ajax"); 
    "fragments/content::form-basic"; 
} 

ich dies jetzt mit:

ModelAndView addWorkItem() { 
     log.info("Display Fragment using Ajax") 
     ModelAndView modelAndView = new ModelAndView("/fragments/content :: content") 
     modelAndView.addObject("content", "Hello World!") 
     return modelAndView 
    } 

Wir brauchen das Modeland zurückzukehren . Wenn Sie etwas auf dem Bildschirm verwenden müssen, können Sie addObject seine Attribute hinzufügen.

Dadurch vermeide ich das Modell, also werde ich das Warnungsproblem los.

Das ist es. Ich konnte diese Lösung nirgends finden. Ich fand Stücke in verschiedenen Artikeln.

https://github.com/dandelion/dandelion/issues/28

http://www.marcelustrojahn.com/2016/08/spring-boot-thymeleaf-fragments-via-ajax/

http://www.xpadro.com/2014/02/thymeleaf-integration-with-spring-part-2.html