Thymeleaf模型属性不存在

时间:2018-11-12 10:55:06

标签: spring-mvc spring-boot thymeleaf

情况

我在Thymeleaf模板引擎中使用SpringBoot应用程序。我发布了所涉及代码的简化版本。控制器将一个属性添加到Model对象,然后返回DeferredResult。最后,在Thymeleaf模板中使用模型的属性将其呈现在页面上。

问题

我知道如果不将对象添加到模型中,由于缺少保护块或th:if,它将在Thymeleaf模板中引发异常。但是我在执行任何代码之前设置初始化对象。我还记录了模型的值以用于调试目的,并且该值在计算后始终存在。因此设置了具有适当键的模型,但是在渲染百里香的时候,模型中的键返回空值。这仅在重负载下发生。在生产系统中或在模拟具有30个以上并发请求的负载时。

在100个请求中发生1〜2次。

我在模型中存储了多个对象。它们随机为空。

我还尝试使用以下代码记录所有值。所有其他数据似乎都很好并且存在,在下面缺少一个的情况下,只有单个对象是“ model_key”。

<table id="model-attributes">
  <tr th:each="var : ${#vars}">
    <td th:text="${var.key}"></td>
    <td th:text="${var.value}"></td>
  </tr>
</table>

问题

其他人也遇到过类似的问题吗?可能是Thymeleaf缓存问题吗?

代码

控制器

@GetMapping(value = "/path") 
public DeferredResult<String> processRequest(Model model) throws Exception {

  // To make sure the model is not null add it already before any computation
  model.addAttribute("model_key", new ModelValue());
  ModelValue modelValue = calculateModel();

  // For debugging purposes
  log("Model Value " + modelValue);

  // Add the actual model
  if(modelValue != null) {
    model.addAttribute("model_key", modelValue);
  } else {
    log.error("Model was empty");
  }
  deferredResult.setResult("template_name");
}

胸腺模板

<p th:text="${model_key.id}">

异常日志

2018-11-12T07:45:28.691Z ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] [http-nio-8080-exec-6] : Servlet.service() for servlet dispatcherServlet threw exception
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'id' cannot be found on null    
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:220)
org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94)

0 个答案:

没有答案