Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Использование Velocity


Автор: Vokunya 4.4.2011, 16:33
Есть у кого-нибудь опыт применения velocity сугубо для электронных писем?
Меня интересует только эта узкая функциональность, т.е. всевозможные настройки сервера, портов, списка получателей... и т.д. 
В общем, было бы неплохо увидеть пример  smile  
Ссылки на ресурсы принимаются smile

P.S. в принципе, если есть какой-нибудь движок по скромнее, заточенный сугубо под данный функционал, то тоже будет очень хорошо

Автор: Embedded 4.4.2011, 17:36
Vokunya
Что-то такое видел
http://www.springbyexample.org/examples/velocity-email-template.html


Ну вообще есть еще конечно FreeMarker, по функционал чуть чуть слабее, но и немного быстрее.. Хотя честно сказать хрен редьки не слаще.
В принципе для этих целей Velocity часто пользуется... В вики так и написано: http://ru.wikipedia.org/wiki/Apache_Velocity

Автор: tux 4.4.2011, 20:23
Vokunya, Velocity - это не более чем генератор текста. Учитывая широту применения текстогенерации, специализированных движков для почты ожидать сложно, тем более что это достаточно просто. Еще пара примеров:
  • http://www.theserverside.com/news/1377021/Sending-Velocity-based-E-mail-with-Spring
  • http://wiki.apache.org/velocity/VelocityMail

Автор: Vokunya 5.4.2011, 10:33
Код

Velocity - это не более чем генератор текста. Учитывая широту применения текстогенерации, специализированных движков для почты ожидать сложно

осознал и согласен  smile 

Возник первый вопрос:
vm-файл имеет такие строки
Код

$project.Code
$project.Name
$project.Manager

Т.е при подстановке будут вызваны геттеры для полей code, name, manager. Правильно? 
Но если какое-нибудь поле не инициализировано, то шаблон остается без изменения (т.е если, например, менеджер не указан, то в сгенерированном тексте будет такое 
Код

myCode
myName
$project.Manager
 
Как обойти такое поведение, кроме как вручную проверять все поля?  

Автор: kkorsakoff 5.4.2011, 11:48
Можно воспользоваться конструкцией $display.alt($project.Manager,'default manager')

http://velocity.apache.org/tools/devel/javadoc/org/apache/velocity/tools/generic/DisplayTool.html#alt(java.lang.Object, java.lang.Object)

Автор: Vokunya 5.4.2011, 14:14
Код

Можно воспользоваться конструкцией $display.alt($project.Manager,'default manager')

Я еще толком не разбирался, бегло просмотрел... это получается, что еще отдельно должно настраиваться VelocityTool, через xml например?
т.е просто написав приведенный пример в vm-ке, ничего не заработает? 

Автор: Embedded 5.4.2011, 15:02
Vokunya
а если так напишите 
Код

$!project.Manager

не получается?

Дело в том что если переменной нет в контексте или ей присвоен null то Velocity будет печатать её имя, но поскольку Velocity зрелый движок, разработчики предусмотрели подавление такого поведения с помощью символа ! перед именем переменной. Тогда Velocity будет игнорировать ссылку на ошибочную переменную.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)