All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.servlet.view.freemarker.spring.ftl Maven / Gradle / Ivy

There is a newer version: 6.1.5
Show newest version
<#ftl output_format="HTML" strip_whitespace=true>
<#--
 * spring.ftl
 *
 * This file consists of a collection of FreeMarker macros aimed at easing
 * some of the common requirements of web applications - in particular
 * handling of forms.
 *
 * Spring's FreeMarker support will automatically make this file and therefore
 * all macros within it available to any application using Spring's
 * FreeMarkerConfigurer.
 *
 * To take advantage of these macros, the "exposeSpringMacroHelpers" property
 * of the FreeMarkerView class needs to be set to "true". This will expose a
 * RequestContext under the name "springMacroRequestContext", as needed by
 * the macros in this library.
 *
 * @author Darren Davison
 * @author Juergen Hoeller
 * @since 1.1
 -->

<#--
 * message
 *
 * Macro to translate a message code into a message.
 -->
<#macro message code>${springMacroRequestContext.getMessage(code)?no_esc}

<#--
 * messageText
 *
 * Macro to translate a message code into a message,
 * using the given default text if no message found.
 -->
<#macro messageText code, text>${springMacroRequestContext.getMessage(code, text)?no_esc}

<#--
 * messageArgs
 *
 * Macro to translate a message code with arguments into a message.
 -->
<#macro messageArgs code, args>${springMacroRequestContext.getMessage(code, args)?no_esc}

<#--
 * messageArgsText
 *
 * Macro to translate a message code with arguments into a message,
 * using the given default text if no message found.
 -->
<#macro messageArgsText code, args, text>${springMacroRequestContext.getMessage(code, args, text)?no_esc}

<#--
 * theme
 *
 * Macro to translate a theme message code into a message.
 -->
<#macro theme code>${springMacroRequestContext.getThemeMessage(code)?no_esc}

<#--
 * themeText
 *
 * Macro to translate a theme message code into a message,
 * using the given default text if no message found.
 -->
<#macro themeText code, text>${springMacroRequestContext.getThemeMessage(code, text)?no_esc}

<#--
 * themeArgs
 *
 * Macro to translate a theme message code with arguments into a message.
 -->
<#macro themeArgs code, args>${springMacroRequestContext.getThemeMessage(code, args)?no_esc}

<#--
 * themeArgsText
 *
 * Macro to translate a theme message code with arguments into a message,
 * using the given default text if no message found.
 -->
<#macro themeArgsText code, args, text>${springMacroRequestContext.getThemeMessage(code, args, text)?no_esc}

<#--
 * url
 *
 * Takes a relative URL and makes it absolute from the server root by
 * adding the context root for the web application.
 -->
<#macro url relativeUrl extra...><#if extra?? && extra?size!=0>${springMacroRequestContext.getContextUrl(relativeUrl,extra)?no_esc}<#else>${springMacroRequestContext.getContextUrl(relativeUrl)?no_esc}

<#--
 * bind
 *
 * Exposes a BindStatus object for the given bind path, which can be
 * a bean (e.g. "person") to get global errors, or a bean property
 * (e.g. "person.name") to get field errors. Can be called multiple times
 * within a form to bind to multiple command objects and/or field names.
 *
 * This macro will participate in the default HTML escape setting for the given
 * RequestContext. This can be customized by calling "setDefaultHtmlEscape"
 * on the "springMacroRequestContext" context variable, or via the
 * "defaultHtmlEscape" context-param in web.xml (same as for the JSP bind tag).
 * Also regards a "htmlEscape" variable in the namespace of this library.
 *
 * Producing no output, the following context variable will be available
 * each time this macro is referenced (assuming you import this library in
 * your templates with the namespace 'spring'):
 *
 *   spring.status : a BindStatus instance holding the command object name,
 *   expression, value, and error messages and codes for the path supplied
 *
 * @param path the path (string value) of the value required to bind to.
 *     Spring defaults to a command name of "command" but this can be
 *     overridden by user configuration.
 -->
<#macro bind path>
    <#if htmlEscape?exists>
        <#assign status = springMacroRequestContext.getBindStatus(path, htmlEscape)>
    <#else>
        <#assign status = springMacroRequestContext.getBindStatus(path)>
    
    <#-- assign a temporary value, forcing a string representation for any
    kind of variable. This temp value is only used in this macro lib -->
    <#if status.value?exists && status.value?is_boolean>
        <#assign stringStatusValue=status.value?string>
    <#else>
        <#assign stringStatusValue=status.value?default("")>
    


<#--
 * bindEscaped
 *
 * Similar to spring:bind, but takes an explicit HTML escape flag rather
 * than relying on the default HTML escape setting.
 -->
<#macro bindEscaped path, htmlEscape>
    <#assign status = springMacroRequestContext.getBindStatus(path, htmlEscape)>
    <#-- assign a temporary value, forcing a string representation for any
    kind of variable. This temp value is only used in this macro lib -->
    <#if status.value?exists && status.value?is_boolean>
        <#assign stringStatusValue=status.value?string>
    <#else>
        <#assign stringStatusValue=status.value?default("")>
    


<#--
 * formInput
 *
 * Display a form input field of type 'text' and bind it to an attribute
 * of a command or bean.
 *
 * @param path the name of the field to bind to
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
 -->
<#macro formInput path attributes="" fieldType="text">
    <@bind path/>
    ${stringStatusValue}" ${attributes?no_esc}<@closeTag/>


<#--
 * formPasswordInput
 *
 * Display a form input field of type 'password' and bind it to an attribute
 * of a command or bean. No value will ever be displayed. This functionality
 * can also be obtained by calling the formInput macro with a 'type' parameter
 * of 'password'.
 *
 * @param path the name of the field to bind to
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
 -->
<#macro formPasswordInput path attributes="">
    <@formInput path, attributes, "password"/>


<#--
 * formHiddenInput
 *
 * Generate a form input field of type 'hidden' and bind it to an attribute
 * of a command or bean. This functionality can also be obtained by calling
 * the formInput macro with a 'type' parameter of 'hidden'.
 *
 * @param path the name of the field to bind to
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
 -->
<#macro formHiddenInput path attributes="">
    <@formInput path, attributes, "hidden"/>


<#--
 * formTextarea
 *
 * Display a text area and bind it to an attribute of a command or bean.
 *
 * @param path the name of the field to bind to
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
 -->
<#macro formTextarea path attributes="">
    <@bind path/>
    


<#--
 * formSingleSelect
 *
 * Show a selectbox (dropdown) input element allowing a single value to be chosen
 * from a list of options.
 *
 * @param path the name of the field to bind to
 * @param options a map (value=label) of all the available options
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
-->
<#macro formSingleSelect path options attributes="">
    <@bind path/>
    


<#--
 * formMultiSelect
 *
 * Show a listbox of options allowing the user to make 0 or more choices from
 * the list of options.
 *
 * @param path the name of the field to bind to
 * @param options a map (value=label) of all the available options
 * @param attributes any additional attributes for the element
 *    (such as class or CSS styles or size)
-->
<#macro formMultiSelect path options attributes="">
    <@bind path/>
    


<#--
 * formRadioButtons
 *
 * Show radio buttons.
 *
 * @param path the name of the field to bind to
 * @param options a map (value=label) of all the available options
 * @param separator the HTML tag or other character list that should be used to
 *    separate each option (typically ' ' or '
') * @param attributes any additional attributes for the element * (such as class or CSS styles or size) --> <#macro formRadioButtons path options separator attributes=""> <@bind path/> <#list options?keys as value> <#assign id="${status.expression?replace('[','')?replace(']','')}${value_index}"> checked="checked" ${attributes?no_esc}<@closeTag/> ${separator?no_esc} <#-- * formCheckboxes * * Show checkboxes. * * @param path the name of the field to bind to * @param options a map (value=label) of all the available options * @param separator the HTML tag or other character list that should be used to * separate each option (typically ' ' or '
') * @param attributes any additional attributes for the element * (such as class or CSS styles or size) --> <#macro formCheckboxes path options separator attributes=""> <@bind path/> <#list options?keys as value> <#assign id="${status.expression?replace('[','')?replace(']','')}${value_index}"> <#assign isSelected = contains(status.actualValue?default([""]), value)> checked="checked" ${attributes?no_esc}<@closeTag/> ${separator?no_esc} <#-- * formCheckbox * * Show a single checkbox. * * @param path the name of the field to bind to * @param attributes any additional attributes for the element * (such as class or CSS styles or size) --> <#macro formCheckbox path attributes=""> <@bind path /> <#assign id="${status.expression?replace('[','')?replace(']','')}"> <#assign isSelected = status.value?? && status.value?string=="true"> checked="checked" ${attributes?no_esc}/> <#-- * showErrors * * Show validation errors for the currently bound field, with * optional style attributes. * * @param separator the HTML tag or other character list that should be used to * separate each option (typically ' ' or '
') * @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, * otherwise a 'class=' attribute will be used. --> <#macro showErrors separator classOrStyle=""> <#list status.errorMessages as error> <#if classOrStyle == ""> ${error} <#else> <#if classOrStyle?index_of(":") == -1><#assign attr="class"><#else><#assign attr="style"> ${error} <#if error_has_next>${separator?no_esc} <#-- * checkSelected * * Check a value in a list to see if it is the currently selected value. * If so, add the 'selected="selected"' text to the output. * Handles values of numeric and string types. * This function is used internally but can be accessed by user code if required. * * @param value the current value in a list iteration --> <#macro checkSelected value> <#if stringStatusValue?is_number && stringStatusValue == value?number>selected="selected" <#if stringStatusValue?is_string && stringStatusValue == value>selected="selected" <#-- * contains * * Macro to return true if the list contains the scalar, false if not. * Surprisingly not a FreeMarker builtin. * This function is used internally but can be accessed by user code if required. * * @param list the list to search for the item * @param item the item to search for in the list * @return true if item is found in the list, false otherwise --> <#function contains list item> <#list list as nextInList> <#if nextInList == item><#return true> <#return false> <#-- * closeTag * * Simple macro to close an HTML tag that has no body with '>' or '/>', * depending on the value of a 'xhtmlCompliant' variable in the namespace * of this library. --> <#macro closeTag> <#if xhtmlCompliant?exists && xhtmlCompliant>/><#else>>




© 2015 - 2024 Weber Informatics LLC | Privacy Policy