Атрибут модели Thymeleaf отсутствует - PullRequest
0 голосов
/ 12 ноября 2018

Ситуация

Я использую приложение SpringBoot с шаблонизатором Thymeleaf.Я опубликовал упрощенную версию кода, который сейчас задействован.Контроллер добавляет атрибут в объект Model, а затем возвращает DeferredResult.В конце атрибуты формы модели используются в шаблоне Thymeleaf для отображения их на странице.

Проблема

Я знаю, не будет ли объект добавлен вмодель, которая выдаст исключение в шаблоне Thymeleaf из-за отсутствия защитного блока или th: if.Но я устанавливаю инициализированный объект перед выполнением любого кода.Я также записываю значение модели для целей отладки и всегда присутствует после расчета.Таким образом, модель с соответствующим ключом установлена, но в точке рендеринга тимелист ключ в модели возвращает нулевое значение.Это происходит только под большой нагрузкой.В производственной системе или при моделировании нагрузки с более чем 30 одновременными запросами.

Это происходит 1 ~ 2 раза в 100 запросах.

Я храню несколько объектов в модели.Они случайно равны нулю.

Я также попытался записать все значения с помощью следующего кода.Все остальные данные, по-видимому, в порядке и присутствуют, только один объект в приведенном ниже случае пропущен один - это "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");
}

Шаблон Thymeleaf

<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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...