Introduction à l’utilisation de FreeMarker dans Spring MVC

Introduction à l'utilisation de FreeMarker dans Spring MVC

1. Vue d'ensemble

FreeMarker est un moteur de modèle basé sur Java d'Apache Software Foundation. Comme d’autres moteurs de modèles, FreeMarker est conçu pour prendre en charge les pages Web HTML dans les applications qui suivent le modèle MVC. Ce tutoriel montre comment utiliserconfigure FreeMarker for use in Spring MVC comme alternative à JSP.

L'article ne traitera pas des bases de l'utilisation de Spring MVC. Pour une analyse approfondie de cela, veuillez vous référer àthis article. De plus, il ne s’agit pas d’un aperçu détaillé des capacités étendues de FreeMarker. Pour plus d'informations sur l'utilisation et la syntaxe de FreeMarker, veuillez visiterits website.

2. Dépendances Maven

Puisqu'il s'agit d'un projet basé sur Maven, nous ajoutons d'abord les dépendances requises auxpom.xml:


    org.freemarker
    freemarker
    2.3.23


    org.springframework
    spring-context-support
    ${spring.version}

3. Les configurations

Passons maintenant à la configuration du projet. Il s'agit d'un projet Spring basé sur des annotations; nous ne démontrerons donc pas la configuration basée sur XML.

3.1. Configuration Web Spring

Créons une classe pour configurer les composants Web. Pour cela, nous devons annoter la classe avec@EnableWebMvc,@Configuration et@ComponentScan.

@EnableWebMvc
@Configuration
@ComponentScan({"com.example.freemarker"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {
    // All web configuration will go here.
}

3.2. ConfigurerViewResolver

Spring MVC Framework fournit l'interfaceViewResolver, qui mappe les noms de vue aux vues réelles. Nous allons créer une instance deFreeMarkerViewResolver, qui appartient à la dépendancespring-webmvc.

Cet objet doit être configuré avec les valeurs requises qui seront utilisées au moment de l'exécution. Par exemple, nous allons configurer le résolveur de vue pour utiliser FreeMarker pour les vues se terminant par.ftl:

@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl");
    return resolver;
}

Notez également comment nous pouvons également contrôler le mode de mise en cache ici - cela ne devrait être désactivé que pour le débogage et le développement.

3.3. Configuration du chemin du modèle FreeMarker

Ensuite, nous allons définir le chemin du modèle, qui indique où se trouvent les modèles dans le contexte Web:

@Bean
public FreeMarkerConfigurer freemarkerConfig() {
    FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
    freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/ftl/");
    return freeMarkerConfigurer;
}

3.4. Configuration du contrôleur à ressort

Nous pouvons maintenant utiliser un Spring Controller pourprocess a FreeMarker template for display. C'est simplement un contrôleur à ressort conventionnel:

@RequestMapping(value = "/cars", method = RequestMethod.GET)
public String init(@ModelAttribute("model") ModelMap model) {
    model.addAttribute("carList", carList);
    return "index";
}

Les configurationsFreeMarkerViewResolver et chemin définies précédemment se chargeront de traduire le nom de la vueindex en vue FreeMarker appropriée.

4. Modèle HTML FreeMarker

4.1. Créer une vue de modèle HTML simple

Il est maintenant temps de créer unHTML template with FreeMarker. Dans notre exemple, nous avons ajouté une liste de voitures au modèle. FreeMarker peut accéder à cette liste et l'afficher en itérant son contenu.

Lorsqu'une demande est faite pour l'URI/cars, Spring traitera le modèle en utilisant le modèle qui lui est fourni. Dans notre modèle, le#list directive indique que FreeMarker doit boucler sur l'objetcarList du modèle, en utilisantcar pour faire référence à l'élément actuel, et rendre le contenu dans ce bloc.

Le code suivant inclut égalementFreeMarkerexpressions pour faire référence aux attributs de chaque élément danscarList; ou par exemple, pour afficher la propriétémake de l’élément voiture actuel, nous utilisons l’expression$\{car.make}.


Add Car
Make :
Model:

<#list model["carList"] as car>
Make Model
${car.make} ${car.model}

Après avoir stylisé la sortie avec CSS, le modèle FreeMarker traité génère un formulaire et une liste de voitures:

browser_localhost-300x235

5. Conclusion

Dans cet article, nous avons expliqué comment intégrer les capacités deFreeMarker in a Spring MVC application. FreeMarker vont bien au-delà de ce que nous avons démontré, veuillez donc visiter leApache FreeMarker website pour des informations plus détaillées sur son utilisation.

L'exemple de code de cet article est disponible dans un projet surGithub.