Библиотека шаблонов Java похожа на ZPT (язык атрибутов)
Я недавно использовал ZPT в Python, и мне нравится язык шаблонов. Я искал что-то подобное для Java, но не смог найти ничего, что бы мне понравилось. Самым близким является FreeMarker.
Проблема с FreeMarker и другими движками шаблонов Java, на которые я смотрел, заключалась в их синтаксисе стиля JSP, который допускает несоответствующий XML. Мне просто интересно, существует ли механизм шаблонов Java, который похож на шаблоны страниц Zope, так что это язык "атрибутов", требующий действительный xml.
7 ответов
Ядро шаблонов Java, которое вы найдете наиболее похожим на Chameleon, - это Thymeleaf.
FreeMarker имеет неприятную зависимость от AWT. Это делает невозможным использование с такими вещами, как Google App Engine.
Я предпочитаю использовать StringTemplate для всех моих потребностей в шаблонах Java. Это единственная система шаблонов на основе Java, которая строго отделяет логику от шаблона.
StringTemplate - это движок шаблонов Java (с портами для C#, Python, Ruby и Scala) для генерации исходного кода, веб-страниц, электронных писем или любого другого форматированного текстового вывода. StringTemplate особенно хорош для многоцелевых генераторов кода, нескольких скинов сайтов и интернационализации / локализации
Его отличительной чертой является то, что он строго обеспечивает разделение вида модели в отличие от других двигателей. Строгое разделение делает сайты и генераторы кода более гибкими и удобными в обслуживании; это также обеспечивает превосходную защиту от вредоносных авторов шаблонов.
Так как вы генерируете XML
Другое решение, которое неочевидно на первый взгляд, - это использование JAXB. У нас есть проект, который требует от нас генерировать XML, у нас есть очень хорошо определенные XSD-файлы для выходных файлов, создание объектов и их сортировка очень просты и очень безболезненны.
Существует также Apache Velocity. Хотя это не требует, чтобы ваши шаблоны были действительными XML. Это может быть нарушителем сделки для вас, учитывая вопрос. Вы, вероятно, могли бы применить это правило с помощью расширений основных классов.