суббота, 1 февраля 2014 г.

FreeMarker - еще одна полезная штука.

FreeMarker — компилирующий обработчик шаблонов, написанный на Java, один из инструментов, позволяющих отделить бизнес-логику и данные от представления в духе концепции Model-view-controller. Используется преимущественно при разработке web-приложений с использованием Java-сервлетов, также может использоваться для вывода текста в других случаях: генерация CSS, исходного кода Java и т. д. В отличие от JSP FreeMarker не является зависимым от архитектуры сервлета или от протокола HTTP. Таким образом шаблонизатор может использоваться не только в web-проектах. FreeMarker является свободным ПО.

Например, у нас есть код:
<html>
<body>
<p>Hello ${name}! You have the following messages:
<#list messages as m>
  <p><b>${m.from}:</b> ${m.body}</p>
</#list>
</body>
</html>


После обработки шаблонизатором Freemarker сгенерирует такую HTML страницу:
<html>
<body>
<p>Hello Joe! You have the following messages:
  <p><b>Tim:</b> Please don't forget to bring the conference papers!</p>
  <p><b>Cindy:</b> Can you give me visit afternoon?</p>
  <p><b>Richard:</b> Man, this time don't forget the papers!</p>
</body>
</html>

Переменные «name» и «messages» были определены до генерации шаблона, так что верстальщик сможет сконцентрироваться только на вопросах правильного отображения содержимого. Шаблон остаётся неизменным в независимости от значения переменной и от того, откуда она была получена. Кроме того, API Java-бинов может быть скрыто с использованием техники, именуемой упаковка объектов (object wrapping). Например, «messages» может быть как списком или массивом Java-бинов, имеющих поля «from» и «body», так и чем-нибудь другим. Шаблон при этом менять не придётся, если при этом использовать правильную обёртку для объекта (object wrapper).

Зависимости для maven:  
<dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.19</version>
</dependency>

Для использования достаточно написать класс:
import freemarker.template.Configuration;
import freemarker.template.Template;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

public class HelloWorldFreemarkerStyle {
 public static void main(String[] args) {
  Configuration configuration = new Configuration();

  configuration.setClassForTemplateLoading(
    HelloWorldFreemarkerStyle.class, "/");
  try {
   Template helloTemplate = configuration.getTemplate("hello.ftl");
   StringWriter writer = new StringWriter();
   Map<String, Object> helloMap = new HashMap<String, Object>();

   helloMap.put("name", "Freemarker");
   helloMap.put("word", "MongoDB");
   helloTemplate.process(helloMap, writer);

   System.out.println(writer);

  } catch (Exception e) {
   e.printStackTrace(); // To change body of catch statement use File |
         // Settings | File Templates.
  }
 }
}

Добавить hello.ftl и написать:
<html>
 <head>
    <title>Welcome!</title>
 </head>
 <body>
    <h1>Hello ${name}</h1>
    <p>I'm learning ${word}</p>
 </body>
</html>
В итоге получим замену всех конструкций ${...} на соответствующие им значения.

Официальная страница Freemakrer.

Комментариев нет:

Отправить комментарий