Introdução ao uso do FreeMarker no Spring MVC

Introdução ao uso do FreeMarker no Spring MVC

1. Visão geral

FreeMarker é um mecanismo de modelo baseado em Java da Apache Software Foundation. Como outros mecanismos de modelo, o FreeMarker foi projetado para suportar páginas da Web HTML em aplicativos seguindo o padrão MVC. Este tutorial ilustra comoconfigure FreeMarker for use in Spring MVC como alternativa ao JSP.

O artigo não discutirá os conceitos básicos do uso do Spring MVC. Para uma análise detalhada disso, consultethis article. Além disso, esta não se destina a ser uma visão detalhada das amplas capacidades do FreeMarker. Para obter mais informações sobre o uso e sintaxe do FreeMarker, visiteits website.

2. Dependências do Maven

Como este é um projeto baseado em Maven, primeiro adicionamos as dependências necessárias aopom.xml:


    org.freemarker
    freemarker
    2.3.23


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

3. Configurações

Agora vamos mergulhar na configuração do projeto. Este é um projeto Spring baseado em anotação, portanto, não demonstraremos a configuração baseada em XML.

3.1. Configuração Spring Web

Vamos criar uma classe para configurar os componentes da web. Para isso precisamos anotar a classe com@EnableWebMvc,@Configuratione@ComponentScan.

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

3.2. ConfigureViewResolver

O Spring MVC Framework fornece a interfaceViewResolver, que mapeia os nomes das visualizações para as visualizações reais. Vamos criar uma instância deFreeMarkerViewResolver, que pertence à dependênciaspring-webmvc.

Esse objeto precisa ser configurado com os valores necessários que serão usados ​​no tempo de execução. Por exemplo, iremos configurar o resolvedor de visualizações para usar FreeMarker para visualizações que terminam em.ftl:

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

Além disso, observe como também podemos controlar o modo de armazenamento em cache aqui - isso só deve ser desativado para depuração e desenvolvimento.

3.3. Configuração do caminho do modelo FreeMarker

Em seguida, definiremos o caminho do modelo, que indica onde os modelos estão localizados no contexto da web:

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

3.4. Configuração do controlador Spring

Agora podemos usar um Spring Controller paraprocess a FreeMarker template for display. Este é simplesmente um controlador de mola convencional:

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

OFreeMarkerViewResolvere as configurações de caminho definidas anteriormente cuidarão da tradução do nome da visualizaçãoindex para a visualização adequada do FreeMarker.

4. Modelo de HTML FreeMarker

4.1. Criar visualização de modelo HTML simples

Agora é hora de criar umHTML template with FreeMarker. Em nosso exemplo, adicionamos uma lista de carros ao modelo. O FreeMarker pode acessar essa lista e exibi-la iterando sobre seu conteúdo.

Quando uma solicitação é feita para o URI/cars, o Spring processará o modelo usando o modelo fornecido. Em nosso modelo, o#list directive indica que o FreeMarker deve fazer um loop sobre o objetocarList do modelo, usandocar para se referir ao elemento atual e renderizar o conteúdo dentro desse bloco.

O código a seguir também incluiFreeMarkerexpressions para se referir aos atributos de cada elemento emcarList; ou, por exemplo, para exibir a propriedademake do elemento carro atual, usamos a expressão$\{car.make}.


Add Car
Make :
Model:

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

Depois de estilizar a saída com CSS, o modelo FreeMarker processado gera um formulário e uma lista de carros:

browser_localhost-300x235

5. Conclusão

Neste artigo, discutimos como integrar os recursos doFreeMarker in a Spring MVC application. FreeMarker vão muito além do que demonstramos, portanto, visiteApache FreeMarker website para obter informações mais detalhadas sobre seu uso.

O código de amostra neste artigo está disponível em um projeto emGithub.