我正在使用Spring MVC和Thymeleaf作为ViewResolver开发一个Web应用程序。我有以下控制器处理程序方法:

    @RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
    public String doSomething(@ModelAttribute("error") String error /*, other attributes */) {
        // find out if there is an error
        error = getErrorMessage();

        return "someHTMLfile";
    }


我的观点包含这一行:

<p><span th:text="${error}">Error Message goes here</span></p>


执行后,标记不会呈现任何内容。这可能是由于${error}计算为空字符串,但我不明白为什么。 Spring的@ModelAttribute注释是否不会自动将对象添加到Thymeleaf可以在其中找到的模型图?

如果我有:

@RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
public String doSomething(ModelMap map /*, other attributes */) {
    // find out if there is an error
    String error;
    error = getErrorMessage();
    map.addAttribute("error", error);

    return "someHTMLfile";
}


该视图完美呈现,并带有错误消息。 @ModelAttribute不会将对象添加到请求模型吗?

编辑:我试图做这两个:

@RequestMapping(value = "/something", method = RequestMethod.POST, params = "submit")
public String doSomething(@ModelAttribute("error") String error, ModelMap map /*, other attributes */) {
    // find out if there is an error
    error = getErrorMessage();
    map.addAttribute("error", error);

    return "someHTMLfile";
}


这也不起作用。

最佳答案

其实我不认为您的问题与Thymeleaf有关,只是SpringMVC :-)

在第一个代码段中,您没有向请求模型添加任何内容,而是尝试从表单中获取名为“错误”的对象。

在第二个代码段中,您确实向模型添加了一个对象,这就是为什么您的视图呈现良好的原因。

查看SpringMVC doc here(16.3.3.8),以更好地理解方法参数上的@ModelAttribute批注。

关于java - Spring MVC和thymeleaf ModelAttribute为null或未评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14179972/

10-14 10:40