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}.
FreeMarker Spring MVC Hello World
Make
Model
<#list model["carList"] as car>
${car.make}
${car.model}
#list>
Depois de estilizar a saída com CSS, o modelo FreeMarker processado gera um formulário e uma lista de carros:
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.