Spring Web Flow – displaying your JSR-303 validation messages using FreeMarker

Instead of creating a custom validator in the traditional sense I’m relying on JSR-303 annotations to specify validation constraints, because, it is the future, and I shouldn’t have to do a load of coding to specify common validation requirements like an email address regular expression or a numeric value that is required to be within a defined range.

Using Spring web flow, I found that binding error messages weren’t available when I called “<@spring.showErrors ‘<br/>’/>” in my freemarker view (after I had bound the field I wanted to show errors for of course).

So where are my error messages?

It turns out that Spring Web Flow has a different way of providing the user with feedback messages. The Spring Web Flow reference documentation says: “Spring Web Flow’s MessageContext is an API for recording messages during the course of flow executions”.

The message context (with all your binding error messages in it) can be found here: flowRequestContext.messageContext. I’ve written a couple of macros to make retrieving error messages from this object a little easier:

<#--
 * Shows flow messages (which reside in flowRequestContext.messageContext)
 *
 * @param source Name of the field that caused the error
 * @param severity String representation of org.springframework.binding.message.Severity
 * @param separator the html tag or other character list that should be used to
 *    separate each option. Typically '<br>'.
 * @param classOrStyle either the name of a CSS class element (which is defined in
 *    the template or an external CSS file) or an inline style. If the value passed in here
 *    contains a colon (:) then a 'style=' attribute will be used, else a 'class=' attribute
 *    will be used.
 * @param tag The HTML tag to wrap the error in
-->
<#macro showFlowMessages source severity separator classOrStyle="" tag="">
  <#assign messages = flowRequestContext.messageContext.getMessagesBySource(source)/>
  <#if (messages?size > 0)>
    <#list messages as message>
      <#if message.severity?string == severity>
        <#if classOrStyle == "" && tag == "">
          ${message.getText()}
        <#else>
          <#if classOrStyle == "">
            <${tag}>${message.getText()}</${tag}>
          <#else>
            <#if tag == ""><#local tag = "span" /></#if>
            <#if classOrStyle?index_of(":") == -1><#local attr="class"><#else><#local attr="style"></#if>
            <${tag} ${attr}="${classOrStyle}">${message.getText()}</${tag}>
          </#if>
        </#if>
        <#if message_has_next>${separator}</#if>
      </#if>
    </#list>
  </#if>
</#macro>

<#--
 * Shows flow messages (which reside in flowRequestContext.messageContext) in an ordered or unordered list
 *
 * @param source Name of the field that caused the error
 * @param severity String representation of org.springframework.binding.message.Severity
 * @param classOrStyle either the name of a CSS class element (which is defined in
 *    the template or an external CSS file) or an inline style. If the value passed in here
 *    contains a colon (:) then a 'style=' attribute will be used, else a 'class=' attribute
 *    will be used.
 * @param ordered Whether or not the macro should output the list as an <ol> or <ul>
-->
<#macro showFlowMessagesList source severity classOrStyle="" ordered=false>
  <#local errorsList><@showFlowMessages source, severity, "", "", "li" /></#local>
  <#if errorsList?trim != "">
    <#if classOrStyle == "">
      <#local attr="">
    <#elseif classOrStyle?index_of(":") == -1>
      <#local attr=" class=" + classOrStyle>
    <#else>
      <#local attr=" style=" + classOrStyle>
    </#if>
    <#if ordered><ol${attr}><#else><ul${attr}></#if>
    ${errorsList}
    <#if ordered></ol><#else></ul></#if>
  </#if>
</#macro>

I’ve added these to my spring extensions, which you can download here: springx.ftl

4,768 thoughts on “Spring Web Flow – displaying your JSR-303 validation messages using FreeMarker

  1. Ребята кто хочет заработать То вообще без опыта не берут Работодатели только время тратят Короче реально рабочий вариант — вакансии в Казахстане с ежедневной оплатой Оплата вовремя В общем смотрите сами по ссылке — работа вахтовым методом в казахстане https://vakansii.trudvsem.kz Найдите нормальную работу Перешлите тому кто ищет работу

  2. Доброго времени суток Отец не выходит из штопора Дети в шоке В клинику тащить страшно Короче нарколог приехал за час — наркологическая помощь на дому быстро Осмотрел и поставил капельницу В общем вся инфа по ссылке — вызвать нарколога на дом круглосуточно https://narkolog-na-dom-moskva-kjl.ru Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  3. Привет с Урала Брат не выходит из штопора Родственники не знают что делать В клинику везти страшно Короче спасла только эта капельница — вызвать капельницу от запоя на дому срочно Через пару часов человек пришёл в себя В общем жмите чтобы сохранить — какую капельницу поставить от похмелья https://kapelnicza-ot-zapoya-ekaterinburg-nmx.ru Капельница — это реальный выход Перешлите тем кто в такой же беде

  4. Народ у кого дети Домашка до ночи Ребёнок перегружен Короче реально удобный и простой — онлайн школа Москва без стресса Учителя настоящие профи В общем жмите чтобы не потерять — онлайн образование онлайн образование Не мучайте себя и детей Перешлите другим родителям

  5. Развод с иностранцем может потребовать учета норм российского и международного права, определения подсудности и правильного оформления документов. Переходите по запросу как развестись с иностранным гражданином в России. Юрист поможет расторгнуть брак через ЗАГС или суд, в том числе без присутствия второго супруга, подготовит заявление и представит ваши интересы. Получите консультацию и узнайте оптимальный порядок действий в вашей ситуации.

  6. Народ у кого дети в школе Задолбали эти сборы в 7 утра Ребёнок не высыпается Короче единственная школа которая работает — школа дистанционно без стресса и нервов Преподаватели профи В общем сохраняйте себе — школа в интернете https://shkola-onlajn-nvc.ru Переходите на дистант нормальный Перешлите другим родителям

  7. sloty online co to Najlepsze Kasyna Online vulkanbet bonus bez depozytu

  8. Народ у кого школьники Учителя которые только и знают что орать А эти поборы на подарки учителям Короче нашли идеальное решение — онлайн образование с индивидуальным расписанием Ребёнок занимается с удовольствием В общем сохраняйте себе — школы с онлайн обучением 8 класс https://shkola-onlajn-wqe.ru Переходите на нормальное обучение Перешлите другим родителям

  9. Доброго вечера земляки Близкий человек снова сорвался Родные не знают что делать В клинику тащить страшно Короче врачи приехали за час — капельница после запоя с витаминами Сняли острую интоксикацию В общем жмите чтобы сохранить — капельница от похмелья на дому стоимость https://kapelnicza-ot-zapoya-ekaterinburg-sdj.ru Не ждите пока станет хуже Перешлите тем кто в такой же беде

  10. kasyno z minimalnym depozytem Najszybciej wypЕ‚acajД…ce kasyna w Polsce top kasyna bonus bez depozytu

  11. Народ у кого дети Учителя со своими закидонами Ребёнок к вечеру как выжатый лимон Короче реально крутая система — онлайн класс с 1 по 11 класс Уроки в комфортное время В общем смотрите сами по ссылке — Не мучайте себя и детей Перешлите другим родителям

  12. total casi o Najlepsze Kasyna Online bizzo casino darmowe spiny

  13. Слушайте кто с ремонтом Решил снести стену между комнатами Мосжилинспекция завернёт любые работы Потратил кучу времени Короче единственное что реально работает — перепланировка с согласованием в Мосжилинспекции И согласуют без проблем В общем вся инфа вот здесь — помощь в оформлении перепланировки квартиры https://pereplanirovka-kvartir-xqm.ru Потом штраф и суды Перешлите тому кто затеял ремонт

  14. good day 4 play login Najlepsze kasyna internetowe darmowe gry online automaty

  15. Здорова народ Жесть полная Жена рыдает Никакие таблетки не помогают Короче помог только этот врач — нарколог на дом срочно Приехал через 30 минут В общем жмите чтобы сохранить — нужен нарколог на дом нужен нарколог на дом Не ждите пока станет хуже Перешлите тем кто в такой же ситуации

  16. Народ помогите Каждое утро как на войну То ремонт то экскурсии то подарки Короче единственная школа где кайфово учиться — школа дистанционно с лицензией Уроки в удобное время В общем смотрите сами по ссылке — школы дистанционного обучения школы дистанционного обучения Переходите на нормальное обучение Перешлите другим родителям

  17. gonzo casino 123 Najlepsze kasyna internetowe kasyno online bez rejestracji

  18. Слушайте внимательно Задолбался я уже искать нормальную работу Объездил кучу сайтов Короче нашел отличный сайт — работа вахтой в Казахстане без опыта с проживанием Оплата вовремя В общем смотрите сами по ссылке — работа в алматы зарплата каждый день работа в алматы зарплата каждый день Найдите нормальную работу Перешлите тому кто ищет работу

  19. kody promocyjne do kasyn Kasyno Bonus bez Depozytu za RejestracjД™ no deposit bonus for registration

  20. Всем привет из столицы Ситуация адская Соседи стучат В больницу тащить страшно Короче помог только этот врач — нарколог на дом круглосуточно без выходных Через пару часов человек пришёл в себя В общем вся инфа по ссылке — нарколог на дом 24 https://narkolog-na-dom-moskva-rty.ru Звоните прямо сейчас Перешлите тем кто в такой же ситуации

  21. good day 4 play kod promocyjny 2026 Najlepsze kasyna internetowe casino in poland

  22. jak usunД…Д‡ konto w total casino п»їKasyno Online Polska wyniki keno na Ејywo

  23. Ребята всем привет Хотел стену снести между комнатами Инспекция не пропускает ничего Потратил кучу времени впустую Короче нашел наконец нормальных специалистов — услуги по перепланировке квартир под ключ Всё за месяц закрыли В общем вся инфа вот здесь — где согласовать перепланировку квартиры в москве https://pereplanirovka-kvartir-vhj.ru Потом себе дороже выйдет Перешлите тому кто тоже ремонт затеял

  24. casino 50 free spins no deposit Kasyno Bonus bez Depozytu za RejestracjД™ blackjack 4 players

  25. kolekcja bogГіw i potworГіw п»їKasyno Online Polska live blackjack online casino

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>