当前位置: 首页 > 知识库问答 >
问题:

Spring MVC和thymeleaf ModelAttribute为null或未计算

柳仲卿
2023-03-14

我正在用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的@ModelAtcm注释不是自动将对象添加到模型映射中,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";
}

这也行不通。

共有2个答案

堵龙野
2023-03-14

我觉得自己很愚蠢,但不管怎样,我们都会犯错。

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

微生鸿轩
2023-03-14

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

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

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

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

 类似资料:
  • 问题内容: 当我编写手表处理函数时,我会在和上检查newVal参数。为什么AngularJS具有这种行为,却没有特定的实用程序方法?所以有但没有。手动实现并不难,但是如何扩展角度以在每个控制器中具有该功能?Tnx。 编辑 : 这个例子: 处理这种方法是否普遍接受? 编辑2 : JSFiddle示例(http://jsfiddle.net/ubA9r/): 问题答案: 您始终可以为您的应用程序完全添

  • 问题内容: 之间有什么区别 和 为何后者不起作用? 问题答案: 在SQL中,之间的比较值,任何其他值(包括另一种使用比较操作符(如),,,等)将导致,这被认为是一个where子句的目的(严格来说,它的“不true”,而不是“false”,但效果相同)。 原因是a的意思是“未知”,因此与a进行任何比较的结果也都是“未知”。因此,通过编码您不会对行造成任何影响。 SQL提供了一种特殊的语法来测试列是否

  • 获取错误。我尝试做多个选择,并更改第二个选择的数据与第一个选择的上更改材料表行。我正在使用Firebase。 当“store.Urunler”为null或未定义时,我会出现此错误。而且我的产品没有列在菜单项上,这意味着选择是空的,但state.products有数据 我怎样才能克服这个错误。我还想添加到Urunler,选择一个输入。我知道我应该为onChanges调用函数,但如果它起作用,我以后会

  • 我正在运行一个React应用程序。 当我通过路由(单击按钮或链接)进入页面时,页面工作正常,但当我重新加载页面时,页面崩溃。我看不到错误在哪里,控制台和源代码显示为空,这是服务器消息控制台消息。 这是运行的代码。我尝试删除currentuser、addhabity和许多其他东西,只是为了了解错误的来源。没有结果。如果我通过链接进入页面,一切正常。 HabiddView.web.jsx 生活orm.

  • 编辑:我需要这样做,所以如果$gt中发送的日期是0000-00-0000:00:00,查询将返回结果中的文档。

  • 我在我的SpringMVC项目中得到了这个错误。我必须在浏览器中手动添加完整的路径来运行代码,但我不能直接运行它。 web.xml: