1

我正在开发一个使用 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";
}

这也行不通。

4

2 回答 2

0

我觉得自己很愚蠢,但无论如何,我们都会犯错。

Spring 正在为我创建一个新String实例并将其注入我的方法和 key 下的模型中error。String 是一个不可变的对象,所以当我这样做时error = getErrorMessage(),我将另一个实例分配给我的error对象。现在在 Spring 的模型中有我error的和错误String,值为"". 这就是为什么 Thymeleaf 渲染只找到空字符串的原因。

于 2013-01-06T23:59:08.140 回答
0

实际上,我认为您的问题与 Thymeleaf 无关,只是 SpringMVC :-)

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

在您的第二个片段中,您确实向模型添加了一个对象,这就是您的视图渲染良好的原因。

在这里查看SpringMVC 文档(16.3.3.8) 以更好地理解方法参数上的 @ModelAttribute 注释。

于 2013-01-06T11:33:15.643 回答