web-dev-qa-db-fra.com

Erreur lors de la résolution du modèle "index", le modèle peut ne pas exister ou être inaccessible par l'un des résolveurs de modèle configurés

Cette question a déjà été posée, mais je n’ai pas résolu mon problème et j’ai eu des fonctionnalités étranges.

Si je mets mon fichier index.html dans le répertoire static comme ceci:

 enter image description here

Je reçois l'erreur suivante dans mon navigateur:

 enter image description here

Et dans ma console:

[THYMELEAF][http-nio-8080-exec-3] Exception processing template "login": 
Exception parsing document: template="login", line 6 - column 3
2015-08-11 16:09:07.922 ERROR 5756 --- [nio-8080-exec-3] 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: Exception 
parsing document: template="login", line 6 - column 3] with root cause

org.xml.sax.SAXParseException: The element type "meta" must be terminated by 
the matching end-tag "</meta>".

Cependant, si je déplace mon fichier index.html dans le répertoire des modèles, le message d'erreur suivant apparaît dans mon navigateur:  enter image description here

 enter image description here

J'ai ajouté mes résolveurs de vue:

@Controller
@EnableWebMvc
public class WebController extends WebMvcConfigurerAdapter {

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

    @RequestMapping(value="/", method = RequestMethod.GET)
    public String getHomePage(){
        return "index";
    }

    @RequestMapping(value="/form", method=RequestMethod.GET)
    public String showForm(Person person) {
        return "form";
    }

    @RequestMapping(value="/form", method=RequestMethod.POST)
    public String checkPersonInfo(@Valid Person person, BindingResult bindingResult) {

        if (bindingResult.hasErrors()) {
            return "form";
        }
        return "redirect:/results";
    }

    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("templates/");
        //resolver.setSuffix(".html");
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

WebSecurityConfig.Java

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/", "/index").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin()
               .loginPage("/login")
                .permitAll()
                .and()
                .logout()
                .permitAll();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<meta>
    <meta> charset="UTF-8">
    <title></title>
</head>
<body>

<h1>Welcome</h1>

<a href="../../login.html"><span>Click here to move to the next page</span></a>

</body>

</html>

À ce stade, je ne sais pas ce qui se passe. Quelqu'un peut-il me donner des conseils?

------METTRE À JOUR--------

J'ai raté une faute de frappe dans index.html mais je reçois toujours les mêmes erreurs

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta> charset="UTF-8">
    <title></title>
</head>
<body>

<h1>Welcome</h1>

<a href="../../login.html"><span>Click here to move to the next page</span></a>

</body>

</html>
16
Drew1208

Dans la console vous dit qu'il y a un conflit avec la connexion. Je pense que vous devriez également déclarer dans l'index.html thymeleaf. Quelque chose comme: 

    <html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:th="http://www.thymeleaf.org" 
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">

<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title>k</title> 
</head>
11
David_Garcia

index.html devrait être à l'intérieur templates, comme je le sais. Donc, votre deuxième tentative semble correcte.

Mais, comme le message d'erreur le dit, index.html semble avoir quelques erreurs. Par exemple. Dans la troisième ligne, la balise meta devrait être en fait une balise head, je pense. 

12
Sanjay

Vérifiez le nom du 

des modèles

dossier. il devrait s'agir de modèles, pas de modèles (sans s).

5
Mohit Singh

cette erreur est probablement survenue la plupart du temps en raison de la balise de fermeture manquante. De plus, vous pouvez utiliser la dépendance suivante pour résoudre ce problème tout en prenant en charge l’ancien formate HTML.

comme votre code charset = "UTF-8"> il n'y a pas de fermeture pour la balise meta.

<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>                                 
</dependency>
1
Muhammad

Si vous faites face à ce problème et que tout semble aller bien, essayez d'invalider le cache/le redémarrage de votre IDE. Cela résoudra le problème dans la plupart des cas.

1
Deni Simon

Pour moi, le problème était dû à la sensibilité de Case. J'utilisais ~{fragments/Base} au lieu de ~{fragments/base} (le nom du fichier était base.html)

Mon environnement de développement était Windows mais le serveur hébergeant l'application était Linux. Je ne voyais donc pas ce problème pendant le développement car les chemins des fenêtres ne sont pas sensibles à la casse.

0
tanneraphid34