Thymeleaf construit une URL avec une variable

J’ai le code suivant définissant une variable dans mon contrôleur:

model.set("type", type); 

Dans la vue thymeleaf, je veux construire un formulaire avec l’URL d’action:

 /mycontroller/{type} 

Des idées pour y parvenir? J’ai lu la documentation de thymeleaf sans succès.

Comme le suggère user482745 dans les commentaires (maintenant supprimés), la concaténation de chaînes que j’ai suggérée précédemment

 

échouera dans certains contextes Web.

Thymeleaf utilise LinkExpression pour résoudre l’expression @{..} . En interne, cela utilise HttpServletResponse#encodeURL(Ssortingng) . Ses états de javadoc

Pour un suivi de session robuste, toutes les URL émises par un servlet doivent être exécutées via cette méthode. Sinon, la réécriture d’URL ne peut pas être utilisée avec des navigateurs ne prenant pas en charge les cookies.

Dans les applications Web où le suivi de session est effectué via l’URL, cette partie sera ajoutée à la chaîne émise pour @{..} avant l’ ${..} . Vous ne le voulez pas.

Au lieu de cela, utilisez les variables de chemin comme suggéré dans la documentation

Vous pouvez également inclure des parameters sous la forme de variables de chemin d’access de la même manière que les parameters normaux, mais en spécifiant un espace réservé dans le chemin de votre URL:

  

Donc, votre exemple ressemblerait à

 
//adding ending curly brace

Si vous ne souhaitez pas utiliser la concaténation de chaînes ( proposée par Sotirios ), vous pouvez utiliser le prétraitement des expressions dans le lien URL :

 

Vous devez concaténer une chaîne à l’intérieur de @ {}.

 

@ {} est utilisé pour la réécriture d’URL. Une partie de la réécriture d’URL garde la trace de la session. Première fois que l’URL de demande d’utilisateur, le serveur d’application ajoute à l’URL ;jsessionid=somehexvalue et génère un cookie avec jsessionid. Lorsque le client envoie un cookie lors de la requête suivante, le serveur sait que le client prend en charge les cookies. Si le serveur sait que les cookies de support client, le serveur ne gardera pas jsessionid addind dans l’URL.

Ma méthode préférée est la substitution littérale avec la syntaxe de pipeline (|).

 

La syntaxe de la variable de chemin Thymeleaf est

 

Référence: Syntaxe d’URL standard Thymeleaf

 Exception evaluating SpringEL expression: "businessId" (login:50) 

J’ai le même problème et je résous par la concatination de chaînes comme ci-dessous.

LoginController.java

 @RequestMapping(value = "/login/{businessId}", method = RequestMethod.GET) public ModelAndView get(HttpServletRequest request, @PathVariable Ssortingng businessId) { ModelAndView modelAndView = new ModelAndView("login"); modelAndView.addObject("businessId", businessId); return modelAndView; } 

login.html

  

Ce dont vous avez besoin c’est:

  

Documentation:

Une aide précieuse est ici: http://www.thymeleaf.org/doc/articles/standardurlsyntax.html . Ce que j’ai utilisé à partir de là était:

Vous pouvez également inclure des parameters sous la forme de variables de chemin d’access de la même manière que les parameters normaux, mais en spécifiant un espace réservé dans le chemin de votre URL:

… Qui plus est: une expression URL comme: