0

У меня есть проект загрузки весны, который использует SpringMVC и Thymeleaf. У меня есть нижний колонтитул, определенный в layout.html, который включен на каждую страницу. В любом случае, нужно включить вызов этого нижнего колонтитула, который показывает «статус» для каждой страницы. Таким образом, при навигации по сайту нижний колонтитул страницы всегда будет показывать желаемую информацию?Thymeleaf SpringMVC нижний колонтитул страницы не найден Контроллер

отдыхает контроллер, который помещает объект Статуса:

@Controller 
public class StatusController { 

@RequestMapping(value = "/status", method = RequestMethod.GET) 
public String get(Model model) { 

    Status status = new Stauts; 
    LocalDate lastUpdate = statusRepository.findByLastUpdate(); 
    ... 
    // do some work to update the status object 
    model.addAttribute(STATUS, status); 
    return "status"; 
} 

У меня есть в моем footer.html это определенно:

<div th:fragment="foot"> 
    <div id="footer"> 
     <div class="container"> 
      <p class="muted credit"> 
      <form action="refreshData" th:action="@{/status}" method="get"></form> 
      Last update status: <span th:text="${status.status}" class="text-info"></span> 
      </p> 
     </div> 
    </div> 
</div> 

И тогда каждая страница включает в себя нижние колонтитулы как таковые:

... 

<div th:include="layout :: foot"></div> 

</body> 

Я поставил контрольную точку в своем контроллере и ее не вызывал, и я всегда получаю это excepti на загрузке страницы:

org.springframework.expression.spel.SpelEvaluationException: EL1007E: (поз 0): Свойство или поле 'статус' не может быть найден на нуль

Интересно, если Контроллер никогда не вызывается, потому что я должен использовать что-то вроде jQuery для создания Ajax-вызовов или потому, что у меня это в моем layout.html, и которые включают в себя не вызовы (что кажется маловероятным)?

ответ

0

ТОК:

<span th:text="${status.status}" class="text-info"> 

ИЗМЕНЕНИЕ

<span th:text="${status}" class="text-info"> 

это покажет нулевой

в контроллере вы установили статус статус = NULL; и установить на карте модели статус атрибута ". Таким образом, $ {status} оценивается как null (это ничего, кроме model.get (" status ")). $ {status.status} будет null.status. в результате в «статуса» не может быть найдено на нуле

+0

Пояснение относительно причины изменения было бы полезно здесь – StormeHawke

+0

Но контроллер никогда не вызывается, поэтому объект Status никогда не возвращается. Я обновлю свой вопрос, чтобы показать, что объект Status был создан до его возвращения. – sonoerin

1

в Spring MVC у вас есть только один контроллер на странице/вызов. вы не можете назвать несколько контроллеров в одном кадре. Я считаю, что это ваша проблема.

у вас есть несколько возможных:

  • Либо вы должны включить эту переменную статуса в каждый контур ролика самостоятельно.

  • создать ControllerAdvice, который готовит статус атрибута модели и применяется к каждому контроллеру (по умолчанию)

  • использовать вызов службы в футере, чтобы принести статус как: й: текст = "$ {@ statusService .status} "

Я для себя как сервисный подход для такой глобальной доступной информации.

+0

Спасибо, Мартин, я создал службу статуса, которая просто возвращает объект статуса, который будет читаться на странице. Кажется, это работает очень хорошо, но мне интересно, есть ли более чистый способ сделать это. Похоже, я пересекаю границы или что-то в этом роде. Может быть, я просто удивлен, насколько хорошо это простое решение работает :) Во всяком случае, спасибо за быстрый и полезный совет. – sonoerin

+0

Вы можете ввести пользовательскую аннотацию «Сервис», например «UIService», и сохранить эту службу только в контексте сервлета. Это помогает идентифицировать такие услуги для меня. –

Смежные вопросы