Spring Thyme Leaf检查全局错误导致NPE

时间:2015-01-10 22:09:13

标签: spring thymeleaf

为了显示使用Thyme Leaf的Spring MVC创建的全局错误,我尝试了http://www.thymeleaf.org/doc/tutorials/2.1/thymeleafspring.html#global-errors给出的示例:

那是,

<div th:if="${#fields.hasGlobalErrors()}">

<ul th:if="${#fields.hasErrors('global')}">

<div th:if="${#fields.hasGlobalErrors()}">

当我将它们添加到我的HTML中时,该页面甚至无法渲染,也无法提交表单。所有的例子都导致:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "#fields.hasErrors('global')"

我用v2.1.4和v.2.1.3尝试了这个并得到了同样的错误。错误或我做错了什么?

是的,标签全部关闭并正确形成。是的,此代码在表单中。是的,表单的所有其他方面都可以在没有全局错误检查的情况下工作。

以下是损坏的HTML的简短版本:

<form action="search.html" th:action="@{/auto/search}">
<p th:if="${#fields.hasErrors('global')}" th:errors="*{global}">
    Incorrect date
</p>
<input type="text" th:field="${command.stockNumber}" />
<select th:field="*{command.startYear}">
    <option value="" th:each="year : ${modelYears}" th:value="${year}"
            th:text="${year}"></option>
</select>
</form>

和控制器..

@RequestMapping(value = "/auto/search", method = RequestMethod.POST)
public String search(@Validated
                     @ModelAttribute("command")
                     AutoSearchCommand autoSearchCommand
                     BindingResult result, Model model) {
    return "search";
}

1 个答案:

答案 0 :(得分:4)

解决:

在全局错误检查之前的标记中需要

th:object。不幸的是,春天百里香叶tutorial没有提到这一点。据推测,我在控制器中覆盖了一个默认的表单名称。

在此工作html的结果中添加标记:

<form action="search.html" th:action="@{/auto/search}">
<div th:object="${command}" th:remove="tag">
    <p th:if="${#fields.hasErrors('global')}" th:errors="*{global}">
        Incorrect date
    </p>
</div>
<input type="text" th:field="${command.stockNumber}" />
<select th:field="*{command.startYear}">
    <option value="" th:each="year : ${modelYears}" th:value="${year}"
            th:text="${year}"></option>
</select>
</form>

..在哪里&#34;命令&#34;是控制器中表单bean的名称。

This thread帮助我解决了问题。