使用Ajax的Thymeleaf无法正常工作

时间:2017-09-15 15:52:47

标签: java ajax spring spring-boot thymeleaf

我试图在项目中使用带有Ajax的Thymeleaf片段,并且我的控制器上有这个方法:

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

我在运行应用程序之前收到此消息:

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) {
    ^

在我想通过ajax添加片段的html中,我将其用于测试:

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

发生的事情是我得到了#34;客人方法!&#34;控制台上的消息,这意味着它到达控制器,但是当它尝试执行时:

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

我得到一个nullPointerException,因为model参数为null。 所以我试着评论这一行,然后返回我想要显示的片段。 这是我的片段:

<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>

我在评论model.addAttribute行时试图将$ {content}文本硬编码,但我没有在屏幕上找回任何内容。

我需要做些什么来修复&#34;警告&#34;我能得到并且能够看到片段显示在正确的位置吗?

1 个答案:

答案 0 :(得分:0)

我能够这样解决:

而不是使用此方法:

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

我现在正在使用它:

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

我们需要返回ModelAndView。如果您需要在屏幕上使用任何内容,则可以添加添加其属性的addObject。

通过这样做,我避开了模型,所以我摆脱了警告问题。

就是这样。我无法在任何地方找到这个解决方案..我在不同的文章中找到了作品。

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