我试图在项目中使用带有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;我能得到并且能够看到片段显示在正确的位置吗?
答案 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