2014-10-21 4 views
2

메신저 사용하여 조각을 포장 한 후 조각을 해결하지 :봄 부팅 : Thymeleaf는 다음과 같이

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

    // status der nodes 
    model.addAttribute("nodeList", nodeService.getNodeListWithOnlineStatus()); 

    return "/fragments :: nodeList"; 
} 

템플릿은 /의 SRC/메인/자원/템플릿에 있습니다. IntelliJ에서 응용 프로그램을 시작할 때이 작동합니다. .jar 파일을 만들고 시작하면 위의 코드는 더 이상 작동하지 않습니다. 오류 :

[2014-10-21 20:37:09.191] log4j - 7941 ERROR [http-nio-666-exec-2] --- TemplateEngine: [THYMELEAF][http-nio-666-exec-2] Exception processing template "/fragments": Error resolving template "/fragments", template might not exist or might not be accessible by any of the configured Template Resolvers 

winrar로 .jar를 열면 /templates/fragments.html이 표시됩니다. 여기에 잘못 뭘 메신저

가 가
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <configuration> 
       <mainClass>de.filth.Application</mainClass> 
       <layout>JAR</layout> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

사람이 말해 줄 수 :

내 pom.xml 파일이 (Maven을 클린 설치) 단지를 구축하기위한 부분이?

감사합니다.

답변

3

보기 이름에 /의 선두가 필요하지 않습니다. 즉 /fragments :: nodeList이 아닌 fragments :: nodeList을 반환해야합니다. 이 변경 사항을 적용한 후 Thymeleaf는 IDE 또는 jar 파일에서 실행할 때 템플릿을 찾을 수 있어야합니다. 당신이 관심이 있다면

, 여기에 후드 아래에 무슨 일이 일어나고있는 작업은 다음과 같습니다

뷰 이름이 클래스 경로에 리소스를 검색하는 데 사용됩니다. fragments :: nodeList은 자원 이름이 /templates/fragments.html이고 /fragments :: nodeList은 자원 이름이 /templates//fragments.html임을 의미합니다 (이중 슬래시에 유의하십시오). IDE에서 실행할 때 리소스는 파일 시스템에서 곧바로 사용할 수 있으며 이중 슬래시는 문제를 일으키지 않습니다. jar 파일에서 실행 중일 때 자원은 해당 jar 내에 중첩되고 이중 슬래시는 해당 자원이 발견되지 못하게합니다. 나는이 행동의 차이가 왜 그렇게 중요한지 완전히 이해하지 못하고 오히려 불행합니다. 나는 opened an issue을 사용하여 우리 (Spring Boot 팀)가 행동을 일관되게하기 위해 할 수있는 일이 있는지 확인할 수 있습니다.

+0

앤디에게 설명을 주신 데 대해 감사드립니다. 문제가 해결되었습니다. 프레임 워크에서 이것이 어떻게 든 더 깊게 해결 될 수 있는지 살펴 봅니다. –

0

옛날 이야기지만, 비슷한 증상과 다른 근본 원인에 문제가있는 동안 나는 그것을 우연히 발견했습니다. 다른 사람에게 도움이 될 수 있도록 도와 주신 해결책을 공유하고 싶었습니다.

분명히 messages.properties 파일의 이름은 대소 문자를 구별하지만 어디 에나 있습니다. 나는 "Messages.properties"(자본 M)라고 불렀고 내부 IDE (IntelliJ)에서 정상적으로 작동했지만 일단 jar에서 app을 실행하려고하면 모든 메시지가 ?? parameter.name ??으로 바뀌 었습니다. M을 소문자 m으로 바꾸면 문제가 해결되었습니다.