Botte de spring + thymeleaf dans IntelliJ: impossible de résoudre les problèmes

J’écris une application de formulaire Web courte utilisant Spring Boot et Thymeleaf sur IntelliJ, mais il semble que dans le fichier HTML, tous les champs du modèle ne puissent pas être résolus. Voici mon code:

Classe de contrôleur:

@Controller public class IndexController{ @RequestMapping(value = "/", method = RequestMethod.GET) public Ssortingng index(){ return "index"; } @RequestMapping(value="/", method = RequestMethod.POST) public Ssortingng addNewPost(@Valid Post post, BindingResult bindingResult, Model model){ if(bindingResult.hasErrors()){ return "index"; } model.addAtsortingbute("title",post.getTitle()); model.addAtsortingbute("content",post.getContent()); return "hello"; } } 

Classe modèle:

 public class Post { @Size(min=4, max=35) private Ssortingng title; @Size(min=30, max=1000) private Ssortingng content; public Ssortingng getTitle() { return title; } public void setTitle(Ssortingng title) { this.title = title; } public Ssortingng getContent() { return content; } public void setContent(Ssortingng content) { this.content = content; } } 

Alors est l’index.html:

    Spring Framework Leo    

Spring Boot and Thymeleaf

Title: Title error message
Content: Content error message

Il y a toujours des lignes rouges sous “post”, “titre” et “contenu”, mais je ne sais pas comment le résoudre. Est-ce un problème d’IntelliJ ou juste un problème de code?

C’est un problème avec IntelliJ: IDEA-132738 .

En gros, IntelliJ ne parvient pas à localiser les variables du modèle lorsque Spring Boot a été utilisé pour tout configurer automatiquement.

  1. Si votre version d’IntelliJ est <2017.3 , c’est, comme l’a écrit Andrew , une erreur connue IDEA-132738 . Il existe une solution de contournement pour se débarrasser des marques d’erreur dans l’EDI. IntelliJ prend également en charge la génération semi-automatique du code mentionné ci-dessous:

Vous pouvez utiliser le raccourci Alt + Entrée pour appeler l’intention “Déclarer la variable externe dans l’annotation de commentaire” afin de supprimer “l’atsortingbut de modèle non résolu” dans vos vues.

Ajoutez le code suivant à votre fichier html :

      

Si vous utilisez des objects extensions construits automatiquement par ThymeLeaf, tels que #temporals de thymeleaf-extras-java8time pour la conversion d’objects java.time :

  

et IntelliJ ne peuvent pas les résoudre, utilisez un code similaire et ajoutez simplement # devant le nom de l’object:

  
  1. Si votre version d’IntelliJ est> = 2017.3 (certaines personnes se plaignent toutefois que cela ne fonctionne toujours pas), le problème doit être résolu (@FloatOverflow: “Je confirme que le problème a été résolu dans la version 2017.3 build 25.Oct.2017 “):

Statut 2017.3

La prise en charge des applications MVC autoconfigurées Spring Boot est terminée, tous les types de vue de configuration automatique fournis sont pris en charge.

Corriger les versions: 2017.3

Je veux append une chose. Comme indiqué ci-dessus, le problème a été résolu dans IntelliJ 2017.3 . Je peux aussi le confirmer.

Cependant, j’ai remarqué que cela n’est vrai que si vous définissez tous vos atsortingbuts directement dans la fonction de contrôleur responsable, comme par exemple:

 @RequestMapping(value = "/userinput") public Ssortingng showUserForm(Model model){ model.addAtsortingbute("method", "post"); model.addAtsortingbute("user", new User()); return "userform"; } 

Si vous utilisez une sous-fonction dans laquelle vous définissez les atsortingbuts du modèle (voir Exemple ci-dessous), IntelliJ ne peut toujours pas trouver les atsortingbuts dans le modèle HTML.

Exemple :

 @RequestMapping(value = "/userinput") public Ssortingng showUserForm(Model model){ return doIt(model); } private Ssortingng doIt(Model model) { model.addAtsortingbute("method", "post"); model.addAtsortingbute("user", new User()); return "userform"; } 

Donc, assurez-vous de toujours placer votre code directement dans la fonction de vue!

Dans mon cas, le problème était que j’avais dans mon application.properties:

 spring.thymeleaf.prefix=file:src/main/resources/templates/ spring.thymeleaf.cache=false 

Une fois ces propriétés supprimées, les mappages de mvc de ressort sont à nouveau détectés par Intellij (dans la version Ultimate, j’utilise 2018.1). De plus, les objects thymeleaf fonctionnent maintenant.

J’ai utilisé ces propriétés pour prendre en charge le développement rapide, où une actualisation rechargerait les fichiers de modèle Thymeleaf.

Pour résoudre ce problème, j’utilise l’option -D suivante dans la configuration d’exécution de mon application Spring Boot pour indiquer à Spring Boot l’emplacement de mes fichiers de propriétés au cours du développement:

 -Dspring.config.location=/dev/application/conf/application.properties 

Cette fonctionnalité est prise en charge dans l’édition Ultimate uniquement.

Cliquez ici pour plus de détails