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

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

  1. Позитивный результат игры зависит от комбинаций
    генератора случайных чисел, выдающих
    свои данные в произвольном порядке.

  2. дизайнеры интерьера санкт петербург дизайн спб

  3. Mostbet daje bonus na start plus darmowe spiny – zarejestruj się błyskawicznie. najpopularniejsze automaty Mostbet 2026 Najlepszy bonus startowy z darmowymi obrotami wyłącznie w Mostbet.

  4. Тензоприбор предлагает калибровочные гири для весов нужного класса точности и номинальной массы для калибровки весов.
    В нашей компании можно купить гири для калибровки весов классов точности E1, E2, F1, F2, M1, M2.
    Чем выше класс точности, тем меньше будет разница между номинальным и действительным значениями массы калибровочной гири.

  5. Юридическая консультация по лишению родительских прав поможет оценить ситуацию, определить основания и выстроить грамотную стратегию защиты или подачи иска. Переходите по запросу юридическая помощь по лишению прав родителей – специалист разъяснит порядок действий и подготовит документы. Получите профессиональную поддержку и ответы на все вопросы уже на первой консультации.

  6. Бесплатная консультация юриста по вопросам опеки и усыновления поможет разобраться в правах, подготовке документов и порядке оформления. Переходите по запросу юридические услуги по усыновлению – специалист подскажет, как действовать в вашей ситуации, оценит риски и предложит оптимальное решение. Получите профессиональную помощь по делам опеки и попечительства на каждом шаге без лишних затрат.

  7. Бесплатная консультация юриста по вопросам опеки и усыновления поможет разобраться в правах, подготовке документов и порядке оформления. Переходите по запросу юристы по опеке над инвалидом – специалист подскажет, как действовать в вашей ситуации, оценит риски и предложит оптимальное решение. Получите профессиональную помощь по делам опеки и попечительства на каждом шаге без лишних затрат.

  8. Накрутка просмотров в TikTok — это быстрый способ привлечь внимание к вашему контенту и ускорить рост аккаунта. Переходите по запросу как поднять просмотры в тт Кворк и величьте показатели популярности, повысьте доверие аудитории и попадите в рекомендации. Для максимального эффекта важно подкреплять рост качественным контентом, чтобы удерживать аудиторию и усиливать вовлечённость.

  9. Услуга накрутки просмотров на канал YouTube поможет быстро увеличить активность под вашими видео и привлечь внимание аудитории. Переходите по запросу накрутить просмотры ютуб Кворк. Дополнительные просмотры повышают видимость роликов в рекомендациях, улучшают статистику канала и создают эффект популярности. Подходит для продвижения новых и существующих видео, увеличения охвата и ускоренного роста канала на YouTube.

  10. Продвигайте свой канал в Яндекс Дзен быстрее: увеличьте число подписчиков и создайте эффект популярности. Переходите по запросу подписчики в дзен купить. Накрутка поможет привлечь внимание новой аудитории, повысить доверие к каналу и ускорить рост. Подходит для новых и развивающихся блогов, чтобы быстрее выйти в рекомендации и усилить продвижение контента.

  11. Продвигайте свой канал быстрее с услугой накрутки подписчиков в YouTube. Увеличьте количество фолловеров, повысьте доверие к каналу и привлеките новую аудиторию. Переходите по запросу накрутка youtube лайков подписчиков просмотров Кворк. Быстрый старт для блогеров, брендов и экспертов. Живые и качественные подписчики, безопасное продвижение и заметный рост популярности вашего контента. Начните развивать канал уже сегодня!

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>