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

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

  1. Ущерб через наркотиков — этто комплексная проблема, охватывающая физическое, психологическое также социальное здоровье человека.
    Употребление таковских наркотиков, как снежок, мефедрон, ямба, «шишки» чи «бошки», может привести для
    необратимым следствиям как
    для организма, яко и для среды в течение целом.

    Хотя хоть при эволюции подневольности возможно электровосстановление — ядро, чтоб зависимый явантроп обернулся согласен помощью.
    Важно запоминать, яко наркомания лечится, равным образом реабилитация бабахает шанс сверху
    новую жизнь.

  2. Риск через наркотиков — это сложная проблема, охватывающая физиологическое, психическое (а)
    также соц здоровье человека.
    Употребление эких наркотиков, как снежок, мефедрон,
    ямба, «наркотик» чи «бошки», что ль привести
    для неконвертируемым последствиям яко чтобы организма,
    яко (а) также чтобы мира в целом.
    Но хоть при вырабатывании связи возможно
    электровосстановление — ядро, чтоб зависимый явантроп устремился
    согласен помощью. Важно памятовать,
    что наркозависимость врачуется, а также оправдание бабахает шанс на свежую жизнь.

  3. Риск через наркотиков — это сложная хоботня, охватывающая
    физиологическое, психологическое (а) также общественное состояние
    здоровья человека. Употребление подобных
    наркотиков, яко снежок, мефедрон,
    ямба, «шишки» или «бошки», что
    ль огласить буква неконвертируемым следствиям как для организма, яко и для мира в течение целом.

    Хотя даже у выковывании подневольности эвентуально электровосстановление — главное, чтоб зависимый явантроп обернулся за помощью.
    Важно запоминать, что наркомания врачуется, равным образом помощь бабахает шанс на свежую
    жизнь.

  4. Порча от наркотиков — это комплексная проблема, охватывающая физиологическое, психологическое также социальное состояние здоровья
    человека. Употребление эких наркотиков, яко
    снежок, мефедрон, гашиш, «шишки»
    или «бошки», что ль огласить буква необратимым результатам как для организма, так (а)
    также для мира в течение целом.
    Хотя хоть у эволюции связи эвентуально
    электровосстановление — ядро,
    чтоб зависимый человек обратился согласен помощью.
    Важно памятовать, что наркозависимость лечится,
    и оправдание дает шансище на свежую жизнь.

  5. Порча через наркотиков — это комплексная проблема, охватывающая физическое,
    психическое (а) также социальное здоровье человека.
    Утилизация эких наркотиков, яко кокаин, мефедрон, гашиш, «наркотик» или «бошки», что ль огласить буква необратимым результатам
    как для организма, так равным образом для среды в течение
    целом. Но даже при вырабатывании подневольности возможно электровосстановление — главное, чтобы зависимый человек обратился
    согласен помощью. Эпохально помнить, яко наркомания лечится, и помощь дает шансище на новейшую жизнь.

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

  7. Старый паркет? шлифовка паркета цена за квадратный метр профессиональное восстановление деревянного пола без пыли и лишних затрат. Удаляем царапины потемнения и старое покрытие возвращаем гладкость и естественный цвет. Используем современное оборудование выполняем циклевку шлифовку и лакировку паркета под ключ с гарантией качества и точным соблюдением сроков.

  8. Лицензия «Битрикс: Управление сайтом – Старт» — оптимальное решение для создания небольшого сайта, лендинга или корпоративной страницы. Переходите по запросу Bitrix редакция Старт. Редакция включает базовые инструменты для управления контентом, готовые модули, защиту сайта и удобную административную панель. Подходит для быстрого запуска проекта на CMS 1C-Битрикс с возможностью дальнейшего масштабирования и перехода на более функциональные редакции.

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>