2014-12-02 7 views
5

Ich habe eine App, die perfekt funktioniert, wenn Sie in IntelliJ oder über Gradle BootRun gestartet.Spring Boot gibt "TemplateInputException: Fehler beim Auflösen der Vorlage" beim Ausführen von jar

jedoch, wenn ich gradle bootRepackage tun und dann versuchen, und das resultierende Glas laufen, ich am Ende mit:

2014-12-02 21:46:14.086 ERROR 9839 --- [nio-2014-exec-2] org.thymeleaf.TemplateEngine    : [THYMELEAF][http-nio-2014-exec-2] Exception processing template "/login": Error resolving template "/login", template might not exist or might not be accessible by any of the configured Template Resolvers 
2014-12-02 21:46:14.087 ERROR 9839 --- [nio-2014-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/login", template might not exist or might not be accessible by any of the configured Template Resolvers] with root cause 

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "/login", template might not exist or might not be accessible by any of the configured Template Resolvers 
    at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:245) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060) 
    at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011) 
    at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335) 

kann ich sehen, dass das Glas hat/templates/** darin enthalten ist. Der Inhalt sieht für mich OK aus. (?)

One möglich Faktor sein kann, dass ich eine HTML-Seite auf ein Layout mit Bezug verwenden, also:

layout:decorator="layouts/main" 

Ich kann bestätigen, dass die Datei in dem Gefäß wird.

/login definiert thusly:

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/login").setViewName("/login"); 
    registry.addViewController("/").setViewName("/login"); 
} 

und ich habe Feder Sicherheit konfiguriert als:

@Configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

@Override 
public void configure(WebSecurity security) { 
    security.ignoring().antMatchers("/assets/**"); 
} 

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
      .csrf().disable(); 
    http 
      .authorizeRequests() 
      .antMatchers("/").permitAll() 
      .anyRequest().authenticated(); 
    http 
      .formLogin() 
      .loginPage("/login") 
      .defaultSuccessUrl("/home") 
      .failureUrl("/login?error") 
      .permitAll() 
      .and() 
      .logout() 
      .invalidateHttpSession(true) 
      .logoutSuccessUrl("/login?logout") 
      .permitAll(); 
} 
} 

Ich denke, dass ist alles, was zu diesem Thema relevant sein könnten ...

Ich habe https://github.com/spring-projects/spring-boot/issues/112 und Proper location of Thymeleaf views for Spring (unter anderem) gesehen. Ungeachtet dieser Ressourcen war es mir nicht gelungen, die Auflösung der Vorlage zu erreichen.

Alle Vorschläge dankbar erhalten.

Bis jetzt mit Spring Boot so weit gekommen zu sein, um bei der letzten Hürde (fast finales Deployment) gestolpert zu sein, ist ärgerlich.

+0

Nichts offensichtlich springt aus auf mich und Spring-Boot hat eine Probe der Verwendungen Thymeleaf mit einem Layout soll (https://github.com/spring-projects/spring- Boot/Baum/Master/Spring-Boot-Beispiele/Spring-Boot-Sample-Web-UI) Ich denke nicht, dass das das Problem ist. Vielleicht hilft ein Blick auf das Beispiel, einen Unterschied in der Einrichtung Ihrer App zu erkennen? –

Antwort

4

Die Antwort scheint hier zu sein: https://github.com/spring-projects/spring-boot/issues/1744

Auf den Punkt gebracht: Wenn ein resouce Pfad enthält ‚//‘, die Dinge schief gehen.

Das Update application.yml thusly zu ändern ist:

spring: 
    thymeleaf: 
    prefix: classpath:/templates 

(das Update für eine .properties-Datei ähnlich ist, natürlich)

Die Sogwirkung ist, dass alle Verweise auf Vorlagen oder was auch immer notwendig durch einen Schrägstrich vorangestellt werden, wie in (Thymeleaf Html-Datei):

 layout:decorator="/layouts/main" 

oder (Groovy-Controller):

I denke, dass Spring Boot sollte dies beheben. Dringend. Das ist wirklich schlechte Ergonomie, die schlecht explodiert, genau an dem Punkt, an dem man sich fühlt, als ob man sich dem endgültigen Einsatz nähert.

+0

Danke für das Posten. Was für mich schließlich funktionierte, war, meinem Grundstück den Schrägstrich hinzuzufügen. 'spring.thymeleaf.prefix = classpath:/templates /' – Derrek

+0

Leider hat dies nicht für mich behoben, habe genau das gleiche Problem. Eclipse funktioniert, mit ausführbaren Jar kann keine Vorlage lösen ... :-( –

3

Okay, ich habe gefunden, wo Sie genau hinsehen müssen. Wenn Sie in Ihren Controller-Klassen @RequestMapping für Klasse verwenden, kein führender Schrägstrich (z. B. @RequestMapping("property")). Bei Methode benötigen Sie einen führenden Schrägstrich (z. B. @GetMapping("/list")) und den Rückgabewert keinen führenden Schrägstrich (z.return "property/list";)

Ein Beispiel Snippet

@Controller 
@RequestMapping("property") 
public class PropertyController { 
    @NonNull PropertyService service; 

    @GetMapping("/list") 
    public String list() { 
     return "property/list"; 
    } 
} 
1

hatte ich gleiches Problem mit Federschuh mit thymeleaf durch Standardkonfiguration. Alle arbeitete, bis ich .jar

Nachricht versuchen haben, sagt: ... org.thymeleaf.exceptions.TemplateInputException: Fehlervorlage "/ Fragmente/Fußzeile"

Lösung I mit/ausgewertete spielen, Problem war, dass Sie brauchen keinen Schrägstrich.

I änderte sich dies:

<footer class="footers" th:replace="/fragments/footer :: footer"> 

hierfür:

<footer class="footers" th:replace="fragments/footer :: footer"> 
+0

Ich begegne dem gleichen Fehler und konnte es wegen Ihrer Antwort beheben, also danke. – blitzen12

0

spring.thymeleaf.prefix = Classpath:/templates/

Änderung

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/login").setViewName("/login"); 
    registry.addViewController("/").setViewName("/login"); 
} 

zu

@Override 
public void addViewControllers(ViewControllerRegistry registry) { 
    registry.addViewController("/login").setViewName("login"); 
    registry.addViewController("/").setViewName("login"); 
} 

der Ansichtsname Relativer Pfad

Verwandte Themen