0

저는 SpringMVC와 Thymeleaf를 사용하는 스프링 부트 프로젝트를 가지고 있습니다. 모든 페이지에 포함 된 layout.html에 정의 된 꼬리말이 있습니다. 어쨌든 각 페이지의 "상태"를 보여주는 해당 바닥 글에 전화를 포함 할 것입니까? 이렇게하면 사이트를 탐색 할 때 페이지 바닥 글에 원하는 정보가 항상 표시 됩니 까?Thymeleaf SpringMVC 페이지 바닥 글이 컨트롤러를 찾지 못했습니다.

이 난 상태 개체두고 REST 컨트롤러가 있습니다

<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> 

을 그리고 각 페이지와 같은 바닥 글을 포함

@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:include="layout :: foot"></div> 

</body> 

나는 내 컨트롤러에 중단 점을 넣었으며 그 콜백은 호출되지 않았고, 나는 항상이 예외를 얻습니다. 페이지로드시 :

org.springframework.expression.spel.SpelEvaluationException : EL1007E : (POS 0) : 속성 또는 필드 '상태가'나는 궁금

널 (null)에서 찾을 수 없습니다 컨트롤러는 Ajax 호출을 만들기 위해 jQuery와 같은 것을 사용해야하기 때문에 호출되지 않았으며, 또는 layout.html에 이것을 가지고 있고 include가 호출을하지 않았기 때문에 (결코있을 법하지 않음) 컨트롤러가 호출되지 않는다?

답변

0

현재 :

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

변경

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

이는 상태 상태 = null을 설정 한 컨트롤러에 널 (null)

를 표시합니다; 모델 맵에서 속성 상태로 설정하십시오. " $ {status}는 null로 평가됩니다 (model.get ("status ") 만 해당). $ {status.status}는 null.status가됩니다. '상태'의 결과 만 페이지/통화 당 하나의 컨트롤러가 스프링 MVC에서 널 (null)

+0

여기에서 변경 이유에 대한 설명이 유용 할 것입니다. – StormeHawke

+0

그러나 컨트롤러는 결코 호출되지 않으므로 상태 개체가 반환되지 않습니다. 반환하기 전에 상태 객체가 인스턴스화되었음을 보여주기 위해 내 질문을 업데이트합니다. – sonoerin

1

에서 찾을 수 없습니다. 당신은 한 번에 여러 개의 컨트롤러를 호출 할 수 없습니다. 나는이 문제 믿습니다.

당신은이 여러 가능성 :

  • 이 상태 변수를 각 cont에 통합해야합니다. 롤러 너 자신. 일 :

  • 모델 속성 상태를 준비하고

  • 이 상태 같은 가져 바닥 글에서 서비스 호출을 사용하여 각 컨트롤러 (기본값)에 적용되는 ControllerAdvice 작성 "$ = 텍스트를 {@ statusService .status} "

나 자신을 위해 이러한 종류의 글로벌 사용 가능한 정보에 대한 서비스 접근 방식을 좋아합니다.

+0

마틴, 고맙습니다. 상태 서비스를 만들었습니다.이 상태 서비스는 페이지에서 읽을 상태 개체를 반환합니다. 이것은 아주 잘 작동하는 것처럼 보이지만, 이것을하기위한 더 깨끗한 방법이 있는지 궁금합니다. 나는 경계선이나 뭔가를 교차시키고있는 것처럼 느낍니다. 어쩌면이 간단한 해결책이 얼마나 잘 작동하는지에 놀랄 것입니다 :) 어쨌든, 빠르고 도움이되는 조언에 감사드립니다. – sonoerin

+0

"UIService"와 같은 사용자 정의 "서비스"주석을 도입하고 서블릿 컨텍스트에서만 이러한 서비스를 유지할 수 있습니다. 이것은 저를위한 그런 서비스를 확인하는 것을 돕는다. –