From 92c9ac0369f8dba9a9cae51b8799e21db24f04f6 Mon Sep 17 00:00:00 2001 From: jdaugherty Date: Tue, 10 Dec 2024 15:44:08 +0000 Subject: [PATCH] Deploying to gh-pages - 15:44:08 --- snapshot/api/allclasses-frame.html | 39 + snapshot/api/deprecated-list.html | 56 +- .../grails/plugin/formfields/Application.html | 64 +- .../formfields/BeanPropertyAccessor.html | 175 +- .../BeanPropertyAccessorFactory.html | 80 +- .../formfields/BeanPropertyAccessorImpl.html | 94 +- .../DelegatingBeanPropertyAccessorImpl.html | 103 +- .../plugin/formfields/FieldsGrailsPlugin.html | 68 +- .../FormFieldsTagLib.BeanAndPrefix.html | 67 +- .../FormFieldsTagLib.BeanAndPrefixStack.html | 82 +- .../plugin/formfields/FormFieldsTagLib.html | 153 +- .../formfields/FormFieldsTemplateService.html | 84 +- .../formfields/PropertyPathAccessor.html | 32 +- .../plugin/formfields/package-summary.html | 4 +- snapshot/api/groovy.ico | Bin 0 -> 9662 bytes snapshot/api/help-doc.html | 8 +- snapshot/api/index-all.html | 719 +++- snapshot/api/index.html | 2 +- .../ScaffoldingBeanConfiguration.html | 396 ++ .../markup/ContextMarkupRenderer.html | 336 ++ .../markup/ContextMarkupRendererImpl.html | 485 +++ .../markup/DomainMarkupRenderer.html | 268 ++ .../markup/DomainMarkupRendererImpl.html | 469 +++ .../markup/PropertyMarkupRenderer.html | 303 ++ .../markup/PropertyMarkupRendererImpl.html | 387 ++ .../scaffolding/markup/package-frame.html | 74 + .../scaffolding/markup/package-summary.html | 220 + .../scaffolding/model/DomainModelService.html | 296 ++ .../model/DomainModelServiceImpl.html | 430 ++ .../scaffolding/model/package-frame.html | 66 + .../scaffolding/model/package-summary.html | 170 + .../model/property/Constrained.html | 687 +++ .../model/property/DomainProperty.html | 472 +++ .../model/property/DomainPropertyFactory.html | 254 ++ .../property/DomainPropertyFactoryImpl.html | 386 ++ .../model/property/DomainPropertyImpl.html | 579 +++ .../model/property/package-frame.html | 66 + .../model/property/package-summary.html | 195 + .../org/grails/scaffolding/package-frame.html | 58 + .../grails/scaffolding/package-summary.html | 144 + .../registry/DomainInputRenderer.html | 263 ++ .../registry/DomainInputRendererRegistry.html | 238 ++ .../registry/DomainOutputRenderer.html | 277 ++ .../DomainOutputRendererRegistry.html | 238 ++ .../scaffolding/registry/DomainRenderer.html | 240 ++ .../registry/DomainRendererRegisterer.html | 366 ++ .../registry/DomainRendererRegistry.html | 384 ++ .../input/AssociationInputRenderer.html | 319 ++ .../BidirectionalToManyInputRenderer.html | 389 ++ .../registry/input/BooleanInputRenderer.html | 319 ++ .../registry/input/CurrencyInputRenderer.html | 376 ++ .../registry/input/DateInputRenderer.html | 319 ++ .../registry/input/DefaultInputRenderer.html | 320 ++ .../registry/input/EnumInputRenderer.html | 333 ++ .../registry/input/FileInputRenderer.html | 319 ++ .../registry/input/InListInputRenderer.html | 320 ++ .../registry/input/LocaleInputRenderer.html | 362 ++ .../input/MapToSelectInputRenderer.html | 324 ++ .../registry/input/NumberInputRenderer.html | 320 ++ .../registry/input/StringInputRenderer.html | 320 ++ .../registry/input/TextareaInputRenderer.html | 320 ++ .../registry/input/TimeInputRenderer.html | 319 ++ .../registry/input/TimeZoneInputRenderer.html | 362 ++ .../registry/input/UrlInputRenderer.html | 319 ++ .../registry/input/package-frame.html | 66 + .../registry/input/package-summary.html | 292 ++ .../output/DefaultOutputRenderer.html | 348 ++ .../registry/output/package-frame.html | 58 + .../registry/output/package-summary.html | 145 + .../scaffolding/registry/package-frame.html | 66 + .../scaffolding/registry/package-summary.html | 210 + snapshot/api/overview-frame.html | 23 +- snapshot/api/overview-summary.html | 48 +- snapshot/api/package-list | 7 + snapshot/index.html | 3688 +++++++++-------- 75 files changed, 18978 insertions(+), 2210 deletions(-) create mode 100644 snapshot/api/org/grails/scaffolding/ScaffoldingBeanConfiguration.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/ContextMarkupRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/ContextMarkupRendererImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/DomainMarkupRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/DomainMarkupRendererImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/PropertyMarkupRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/PropertyMarkupRendererImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/markup/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/model/DomainModelService.html create mode 100644 snapshot/api/org/grails/scaffolding/model/DomainModelServiceImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/model/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/model/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/Constrained.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/DomainProperty.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/DomainPropertyFactory.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/DomainPropertyFactoryImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/DomainPropertyImpl.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/model/property/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainInputRendererRegistry.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainOutputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainOutputRendererRegistry.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainRendererRegisterer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/DomainRendererRegistry.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/AssociationInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/BidirectionalToManyInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/BooleanInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/CurrencyInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/DateInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/DefaultInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/EnumInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/FileInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/InListInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/LocaleInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/MapToSelectInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/NumberInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/StringInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/TextareaInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/TimeInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/TimeZoneInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/UrlInputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/input/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/output/DefaultOutputRenderer.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/output/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/output/package-summary.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/package-frame.html create mode 100644 snapshot/api/org/grails/scaffolding/registry/package-summary.html diff --git a/snapshot/api/allclasses-frame.html b/snapshot/api/allclasses-frame.html index c711275d..1b5903c8 100644 --- a/snapshot/api/allclasses-frame.html +++ b/snapshot/api/allclasses-frame.html @@ -33,16 +33,55 @@

All Classes

diff --git a/snapshot/api/deprecated-list.html b/snapshot/api/deprecated-list.html index 42dcd4bb..61aef5c0 100644 --- a/snapshot/api/deprecated-list.html +++ b/snapshot/api/deprecated-list.html @@ -23,9 +23,9 @@ - - Deprecated API (fields "${RELEASE_VERSION}" API) - + + Deprecated API (fields 6.0.0-SNAPSHOT API) + @@ -34,7 +34,7 @@ @@ -70,10 +70,58 @@

Deprecated API

Contents

+ + + + + +
diff --git a/snapshot/api/grails/plugin/formfields/Application.html b/snapshot/api/grails/plugin/formfields/Application.html index 73cb90c1..75e973cd 100644 --- a/snapshot/api/grails/plugin/formfields/Application.html +++ b/snapshot/api/grails/plugin/formfields/Application.html @@ -26,9 +26,9 @@ - - Application (fields "${RELEASE_VERSION}" API) - + + Application (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
@@ -98,6 +98,13 @@

[Groovy] Class Application<
  • + +
    + +
    @groovy.transform.CompileStatic
    +@grails.plugins.metadata.PluginSource
    +class Application
    +extends grails.boot.config.GrailsAutoConfiguration
  • @@ -141,6 +148,27 @@

    [Groovy] Class Application< + + + @@ -179,7 +207,7 @@

    Inherited Methods Summary

    class grails.boot.config.GrailsAutoConfiguration - grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#doWithSpring(), grails.boot.config.GrailsAutoConfiguration#doWithDynamicMethods(), grails.boot.config.GrailsAutoConfiguration#doWithApplicationContext(), grails.boot.config.GrailsAutoConfiguration#onConfigChange(java.util.Map), grails.boot.config.GrailsAutoConfiguration#onStartup(java.util.Map), grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#packageNames(), grails.boot.config.GrailsAutoConfiguration#invokeMethod(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#onShutdown(java.util.Map), grails.boot.config.GrailsAutoConfiguration#getMetaClass(), grails.boot.config.GrailsAutoConfiguration#setMetaClass(groovy.lang.MetaClass), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String), grails.boot.config.GrailsAutoConfiguration#classes(), grails.boot.config.GrailsAutoConfiguration#packages(), grails.boot.config.GrailsAutoConfiguration#wait(long, int), grails.boot.config.GrailsAutoConfiguration#wait(long), grails.boot.config.GrailsAutoConfiguration#wait(), grails.boot.config.GrailsAutoConfiguration#equals(java.lang.Object), grails.boot.config.GrailsAutoConfiguration#toString(), grails.boot.config.GrailsAutoConfiguration#hashCode(), grails.boot.config.GrailsAutoConfiguration#getClass(), grails.boot.config.GrailsAutoConfiguration#notify(), grails.boot.config.GrailsAutoConfiguration#notifyAll() + grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#packages(), grails.boot.config.GrailsAutoConfiguration#classes(), grails.boot.config.GrailsAutoConfiguration#packageNames(), grails.boot.config.GrailsAutoConfiguration#getMetaClass(), grails.boot.config.GrailsAutoConfiguration#setMetaClass(groovy.lang.MetaClass), grails.boot.config.GrailsAutoConfiguration#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#$getLookup(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#doWithSpring(), grails.boot.config.GrailsAutoConfiguration#doWithDynamicMethods(), grails.boot.config.GrailsAutoConfiguration#doWithApplicationContext(), grails.boot.config.GrailsAutoConfiguration#onConfigChange(java.util.Map), grails.boot.config.GrailsAutoConfiguration#onStartup(java.util.Map), grails.boot.config.GrailsAutoConfiguration#onShutdown(java.util.Map), grails.boot.config.GrailsAutoConfiguration#wait(long, int), grails.boot.config.GrailsAutoConfiguration#wait(), grails.boot.config.GrailsAutoConfiguration#wait(long), grails.boot.config.GrailsAutoConfiguration#equals(java.lang.Object), grails.boot.config.GrailsAutoConfiguration#toString(), grails.boot.config.GrailsAutoConfiguration#hashCode(), grails.boot.config.GrailsAutoConfiguration#getClass(), grails.boot.config.GrailsAutoConfiguration#notify(), grails.boot.config.GrailsAutoConfiguration#notifyAll(), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#invokeMethod(java.lang.String, java.lang.Object) @@ -203,6 +231,24 @@

    Inherited Methods Summary

    + + + @@ -255,11 +301,11 @@

    static void main(java.lang.String[] args)

    Groovy Documentation

    diff --git a/snapshot/api/grails/plugin/formfields/BeanPropertyAccessor.html b/snapshot/api/grails/plugin/formfields/BeanPropertyAccessor.html index 4c19e108..2410b4fb 100644 --- a/snapshot/api/grails/plugin/formfields/BeanPropertyAccessor.html +++ b/snapshot/api/grails/plugin/formfields/BeanPropertyAccessor.html @@ -26,9 +26,9 @@ - - BeanPropertyAccessor (fields "${RELEASE_VERSION}" API) - + + BeanPropertyAccessor (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -97,6 +97,10 @@

    [Groovy] Inter @@ -138,110 +142,110 @@

    Methods Summary

    - grails.core.GrailsDomainClass - getBeanClass()
    Returns:
    the GORM domain type of `beanType`.
    + abstract grails.core.GrailsDomainClass + getBeanClass()
    Returns:
    the GORM domain type of `beanType`.
    - java.util.List<java.lang.Class> - getBeanSuperclasses()
    @return all superclasses and interfaces of `beanType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`. + abstract java.util.List<java.lang.Class> + getBeanSuperclasses()
    Returns:
    all superclasses and interfaces of `beanType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
    - java.lang.Class - getBeanType()
    @return the type of the object that owns the property at the end of the path, e.g. for a `address.home.street` then the type of `home` is returned. + abstract java.lang.Class + getBeanType()
    Returns:
    the type of the object that owns the property at the end of the path, e.g. for a `address.home.street` then the type of `home` is returned.
    - org.grails.scaffolding.model.property.Constrained - getConstraints()
    Returns:
    the constraints of the property at the end of the path, e.g. for `address.home.street` then the constraints of `street` are returned.
    + abstract Constrained + getConstraints()
    Returns:
    the constraints of the property at the end of the path, e.g. for `address.home.street` then the constraints of `street` are returned.
    - java.lang.String - getDefaultLabel()
    @return default label text for the property at the end of the path. + abstract java.lang.String + getDefaultLabel()
    Returns:
    default label text for the property at the end of the path.
    - org.grails.datastore.mapping.model.PersistentProperty - getDomainProperty()
    Returns:
    the GORM persistent property descriptor for the property at the end of the path, e.g. for `address.home.street` then the descriptor of `street` is returned.
    + abstract org.grails.datastore.mapping.model.PersistentProperty + getDomainProperty()
    Returns:
    the GORM persistent property descriptor for the property at the end of the path, e.g. for `address.home.street` then the descriptor of `street` is returned.
    - org.grails.datastore.mapping.model.PersistentEntity - getEntity()
    Returns:
    the GORM domain type of `beanType`.
    + abstract org.grails.datastore.mapping.model.PersistentEntity + getEntity()
    Returns:
    the GORM domain type of `beanType`.
    - java.util.List<org.springframework.validation.FieldError> - getErrors()
    Returns:
    the resolved messages for any validation errors present on the property at the end of the path.
    + abstract java.util.List<org.springframework.validation.FieldError> + getErrors()
    Returns:
    the resolved messages for any validation errors present on the property at the end of the path.
    - java.util.List<java.lang.String> - getLabelKeys()
    @return the i18n keys used to resolve a label for the property at the end of the path in order of preference. + abstract java.util.List<java.lang.String> + getLabelKeys()
    Returns:
    the i18n keys used to resolve a label for the property at the end of the path in order of preference.
    - java.lang.String - getPathFromRoot()
    @return the full path from the root bean to the requested property. + abstract java.lang.String + getPathFromRoot()
    Returns:
    the full path from the root bean to the requested property.
    - java.lang.String - getPropertyName()
    @return the name of the property at the end of the path, e.g. for `address.home.street`, `street` is returned. + abstract java.lang.String + getPropertyName()
    Returns:
    the name of the property at the end of the path, e.g. for `address.home.street`, `street` is returned.
    - java.lang.Class - getPropertyType()
    @return the type of the property at the end of the path, e.g. for `address.home.street` then the type of `street` is returned. + abstract java.lang.Class + getPropertyType()
    Returns:
    the type of the property at the end of the path, e.g. for `address.home.street` then the type of `street` is returned.
    - java.util.List<java.lang.Class> - getPropertyTypeSuperclasses()
    @return all superclasses and interfaces of `propertyType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`. + abstract java.util.List<java.lang.Class> + getPropertyTypeSuperclasses()
    Returns:
    all superclasses and interfaces of `propertyType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
    - java.lang.Object - getRootBean()
    @return the object at the root of a path expression, e.g. for a `person` bean and `address.street` then `person` is returned. + abstract java.lang.Object + getRootBean()
    Returns:
    the object at the root of a path expression, e.g. for a `person` bean and `address.street` then `person` is returned.
    - java.lang.Class - getRootBeanType()
    @return the type of the object at the root of a path expression, e.g. for a `person` bean and `address.street` then the type of `person` is returned. + abstract java.lang.Class + getRootBeanType()
    Returns:
    the type of the object at the root of a path expression, e.g. for a `person` bean and `address.street` then the type of `person` is returned.
    - java.lang.Object - getValue()
    @return the value of the property at the end of the path, e.g. for `address.home.street` then the value of `street` is returned. + abstract java.lang.Object + getValue()
    Returns:
    the value of the property at the end of the path, e.g. for `address.home.street` then the value of `street` is returned.
    - boolean - isInvalid()
    Returns:
    whether or not the property has any validation errors (i.e.
    + abstract boolean + isInvalid()
    Returns:
    whether or not the property has any validation errors (i.e.
    - boolean - isRequired()
    Returns:
    whether or not the property is required as determined by constraints.
    + abstract boolean + isRequired()
    Returns:
    whether or not the property is required as determined by constraints.
    @@ -279,163 +283,144 @@

    Method Detail

    diff --git a/snapshot/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html b/snapshot/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html index 336d549a..ed0f72d6 100644 --- a/snapshot/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html +++ b/snapshot/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html @@ -26,9 +26,9 @@ - - BeanPropertyAccessorFactory (fields "${RELEASE_VERSION}" API) - + + BeanPropertyAccessorFactory (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
    @@ -101,15 +101,15 @@

    [Groovy] Cl
    All Implemented Interfaces and Traits:
    grails.core.support.GrailsApplicationAware
    + +
    -
    -
    class BeanPropertyAccessorFactory
    -extends java.lang.Object
    -
    -
    - +
    @groovy.transform.CompileStatic
    +class BeanPropertyAccessorFactory
    +extends java.lang.Object
    +implements grails.core.support.GrailsApplicationAware
    @@ -128,7 +128,7 @@

    [Groovy] Cl - @@ -250,7 +272,7 @@

    org.grails.datastore.gorm.validation.constraints.eval.ConstraintsEvaluator < @@ -286,6 +308,24 @@

    grails.core.support.proxy.ProxyHandler proxyHandler

    + + + @@ -296,7 +336,7 @@

    grails.core.support.proxy.ProxyHandler proxyHandler

    Method Detail

    - + @@ -130,7 +130,7 @@

    [Groovy] Class - @@ -331,7 +359,7 @@

    java.lang.Class beanType

    @@ -415,6 +443,24 @@

    java.lang.Object value

    + + + @@ -465,6 +511,14 @@

    java.util.List<java.lang.Class> getPropertyTypeSuperclasses + +
      +
    • +

      protected static java.util.List<java.lang.Class> getSuperclassesAndInterfaces(java.lang.Class type)

      +

      +
    • +
    +
    • @@ -515,11 +569,11 @@

      boolean isRequired()

      Groovy Documentation

      diff --git a/snapshot/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html b/snapshot/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html index 83035039..09dae86f 100644 --- a/snapshot/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html +++ b/snapshot/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html @@ -26,9 +26,9 @@ - - DelegatingBeanPropertyAccessorImpl (fields "${RELEASE_VERSION}" API) - + + DelegatingBeanPropertyAccessorImpl (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -101,17 +101,17 @@

      [Gro
      All Implemented Interfaces and Traits:
      BeanPropertyAccessor
      + +
      -
      +
      @groovy.transform.CompileStatic
      -@groovy.transform.Canonical(includes = ['beanType', 'propertyName', 'propertyType'])
      +@groovy.transform.Canonical
      +@groovy.transform.ToString(includes: [beanType, propertyName, propertyType])
       class DelegatingBeanPropertyAccessorImpl
       extends java.lang.Object
      -
      -
      - - +implements BeanPropertyAccessor

    @@ -130,7 +130,7 @@

    [Gro -
      +
      • Properties Summary

      • +
      @@ -179,8 +185,7 @@

      Constructor Summary

      - DelegatingBeanPropertyAccessorImpl - (java.lang.Object rootBean, java.lang.Object value, java.lang.Class propertyType, java.lang.String pathFromRoot, org.grails.scaffolding.model.property.DomainProperty domainProperty)
      + DelegatingBeanPropertyAccessorImpl(java.lang.Object rootBean, java.lang.Object value, java.lang.Class propertyType, java.lang.String pathFromRoot, DomainProperty domainProperty, boolean addPathFromRoot)
      @@ -224,7 +229,7 @@

      Methods Summary

      - org.grails.scaffolding.model.property.Constrained + Constrained getConstraints()
      @@ -322,7 +327,7 @@

      Inherited Methods Summary

      class java.lang.Object - java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() + java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
    @@ -349,6 +354,14 @@

    Inherited Methods Summary

    Property Detail

    + +
      +
    • +

      final boolean addPathFromRoot

      +

      +
    • +
    +
    • @@ -387,10 +400,10 @@

      final java.lang.Class propertyType

      Constructor Detail

      - +
      • -

        DelegatingBeanPropertyAccessorImpl(java.lang.Object rootBean, java.lang.Object value, java.lang.Class propertyType, java.lang.String pathFromRoot, org.grails.scaffolding.model.property.DomainProperty domainProperty)

        +

        DelegatingBeanPropertyAccessorImpl(java.lang.Object rootBean, java.lang.Object value, java.lang.Class propertyType, java.lang.String pathFromRoot, DomainProperty domainProperty, boolean addPathFromRoot)

      @@ -411,8 +424,7 @@

      Method Detail

      • -

        @java.lang.Override -boolean equals(java.lang.Object obj)

        +

        @java.lang.Override
        boolean equals(java.lang.Object obj)

      @@ -420,9 +432,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -@java.lang.Deprecated -grails.core.GrailsDomainClass getBeanClass()

        +

        @java.lang.Override
        @java.lang.Deprecated
        grails.core.GrailsDomainClass getBeanClass()

      @@ -430,8 +440,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.util.List<java.lang.Class> getBeanSuperclasses()

        +

        @java.lang.Override
        java.util.List<java.lang.Class> getBeanSuperclasses()

      @@ -439,8 +448,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -org.grails.scaffolding.model.property.Constrained getConstraints()

        +

        @java.lang.Override
        Constrained getConstraints()

      @@ -448,8 +456,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.lang.String getDefaultLabel()

        +

        @java.lang.Override
        java.lang.String getDefaultLabel()

      @@ -457,8 +464,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -org.grails.datastore.mapping.model.PersistentProperty getDomainProperty()

        +

        @java.lang.Override
        org.grails.datastore.mapping.model.PersistentProperty getDomainProperty()

      @@ -466,8 +472,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -org.grails.datastore.mapping.model.PersistentEntity getEntity()

        +

        @java.lang.Override
        org.grails.datastore.mapping.model.PersistentEntity getEntity()

      @@ -475,8 +480,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.util.List<org.springframework.validation.FieldError> getErrors()

        +

        @java.lang.Override
        java.util.List<org.springframework.validation.FieldError> getErrors()

      @@ -484,8 +488,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.util.List<java.lang.String> getLabelKeys()

        +

        @java.lang.Override
        java.util.List<java.lang.String> getLabelKeys()

      @@ -493,8 +496,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.lang.String getPathFromRoot()

        +

        @java.lang.Override
        java.lang.String getPathFromRoot()

      @@ -502,8 +504,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.util.List<java.lang.Class> getPropertyTypeSuperclasses()

        +

        @java.lang.Override
        java.util.List<java.lang.Class> getPropertyTypeSuperclasses()

      @@ -511,8 +512,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.lang.Object getRootBean()

        +

        @java.lang.Override
        java.lang.Object getRootBean()

      @@ -520,8 +520,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.lang.Class getRootBeanType()

        +

        @java.lang.Override
        java.lang.Class getRootBeanType()

      @@ -529,8 +528,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -java.lang.Object getValue()

        +

        @java.lang.Override
        java.lang.Object getValue()

      @@ -538,8 +536,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -int hashCode()

        +

        @java.lang.Override
        int hashCode()

      @@ -547,8 +544,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -boolean isInvalid()

        +

        @java.lang.Override
        boolean isInvalid()

      @@ -556,8 +552,7 @@

      @java.lang.Override
      • -

        @java.lang.Override -boolean isRequired()

        +

        @java.lang.Override
        boolean isRequired()

      diff --git a/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html b/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html index 939586e1..4724c067 100644 --- a/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html +++ b/snapshot/api/grails/plugin/formfields/FieldsGrailsPlugin.html @@ -26,9 +26,9 @@ - - FieldsGrailsPlugin (fields "${RELEASE_VERSION}" API) - + + FieldsGrailsPlugin (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
      @@ -98,6 +98,11 @@

      [Groovy] Class Field
    • + +
      + +
      class FieldsGrailsPlugin
      +extends grails.plugins.Plugin
    @@ -136,7 +141,7 @@

    [Groovy] Class Field -
      +
      • Properties Summary

          @@ -165,6 +170,7 @@

          Properties Summary

      • +
      @@ -172,6 +178,27 @@

      Properties Summary

      + +
        +
      • +

        Constructor Summary

        +
          + + + + + + + + + + +
          Constructors 
          Constructor and description
          + FieldsGrailsPlugin()
          +
        +
      • +
      + @@ -210,7 +237,7 @@

      Inherited Methods Summary

      class grails.plugins.Plugin - grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getGrailsApplication(), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#onChange(java.util.Map), grails.plugins.Plugin#onConfigChange(java.util.Map), grails.plugins.Plugin#onStartup(java.util.Map), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#setPlugin(grails.plugins.GrailsPlugin), grails.plugins.Plugin#setPluginManager(grails.plugins.GrailsPluginManager), grails.plugins.Plugin#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#getPluginManager(), grails.plugins.Plugin#getEnabled(), grails.plugins.Plugin#getPlugin(), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#getEnvironment(), grails.plugins.Plugin#setEnvironment(grails.util.Environment), grails.plugins.Plugin#isEnabled(), grails.plugins.Plugin#invokeMethod(java.lang.String, java.lang.Object), grails.plugins.Plugin#onShutdown(java.util.Map), grails.plugins.Plugin#setEnabled(boolean), grails.plugins.Plugin#getMetaClass(), grails.plugins.Plugin#setMetaClass(groovy.lang.MetaClass), grails.plugins.Plugin#getManager(), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object), grails.plugins.Plugin#getProperty(java.lang.String), grails.plugins.Plugin#wait(long, int), grails.plugins.Plugin#wait(long), grails.plugins.Plugin#wait(), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#toString(), grails.plugins.Plugin#hashCode(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#notify(), grails.plugins.Plugin#notifyAll() + grails.plugins.Plugin#getPluginManager(), grails.plugins.Plugin#getPlugin(), grails.plugins.Plugin#getEnabled(), grails.plugins.Plugin#getEnvironment(), grails.plugins.Plugin#setEnvironment(grails.util.Environment), grails.plugins.Plugin#onChange(java.util.Map), grails.plugins.Plugin#getConfig(), grails.plugins.Plugin#isEnabled(), grails.plugins.Plugin#setEnabled(boolean), grails.plugins.Plugin#getMetaClass(), grails.plugins.Plugin#setMetaClass(groovy.lang.MetaClass), grails.plugins.Plugin#getManager(), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#$getLookup(), grails.plugins.Plugin#getGrailsApplication(), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithApplicationContext(), grails.plugins.Plugin#onConfigChange(java.util.Map), grails.plugins.Plugin#onStartup(java.util.Map), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#setPlugin(grails.plugins.GrailsPlugin), grails.plugins.Plugin#setPluginManager(grails.plugins.GrailsPluginManager), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#onShutdown(java.util.Map), grails.plugins.Plugin#wait(long, int), grails.plugins.Plugin#wait(), grails.plugins.Plugin#wait(long), grails.plugins.Plugin#equals(java.lang.Object), grails.plugins.Plugin#toString(), grails.plugins.Plugin#hashCode(), grails.plugins.Plugin#getClass(), grails.plugins.Plugin#notify(), grails.plugins.Plugin#notifyAll(), grails.plugins.Plugin#getProperty(java.lang.String), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object), grails.plugins.Plugin#invokeMethod(java.lang.String, java.lang.Object)
    @@ -268,6 +295,24 @@

    java.lang.Object loadAfter

    + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        FieldsGrailsPlugin()

        +

        +
      • +
      + +
    • +
    + @@ -281,8 +326,7 @@

    Method Detail

    • -

      @java.lang.Override -groovy.lang.Closure doWithSpring()

      +

      @java.lang.Override
      groovy.lang.Closure doWithSpring()

    @@ -321,11 +365,11 @@

    @java.lang.Override

    Groovy Documentation

    diff --git a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html index 6c29322b..996a1da7 100644 --- a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html +++ b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html @@ -26,9 +26,9 @@ - - FormFieldsTagLib.BeanAndPrefix (fields "${RELEASE_VERSION}" API) - + + FormFieldsTagLib.BeanAndPrefix (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
    @@ -87,7 +87,7 @@
    Package: grails.plugin.formfields
    -

    [Groovy] Class BeanAndPrefix

    +

    [Groovy] Class FormFieldsTagLib.BeanAndPrefix

      @@ -98,6 +98,11 @@

      [Groovy] Class BeanAndPre
    • + +
      + +
      class FormFieldsTagLib.BeanAndPrefix
      +extends java.lang.Object
    @@ -116,7 +121,7 @@

    [Groovy] Class BeanAndPre -
      +
      • Properties Summary

          @@ -145,6 +150,7 @@

          Properties Summary

      • +
      @@ -152,6 +158,27 @@

      Properties Summary

      + + + @@ -169,7 +196,7 @@

      Inherited Methods Summary

      class java.lang.Object - java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() + java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
    @@ -227,6 +254,24 @@

    java.lang.String prefix

    + +
      +
    • + + +

      Constructor Detail

      + + +
        +
      • +

        FormFieldsTagLib.BeanAndPrefix()

        +

        +
      • +
      + +
    • +
    + @@ -261,11 +306,11 @@

    java.lang.String prefix

    Groovy Documentation

    diff --git a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html index 4c9bb396..fa6dca62 100644 --- a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html +++ b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html @@ -26,9 +26,9 @@ - - FormFieldsTagLib.BeanAndPrefixStack (fields "${RELEASE_VERSION}" API) - + + FormFieldsTagLib.BeanAndPrefixStack (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
    @@ -87,17 +87,22 @@
    Package: grails.plugin.formfields
    -

    [Groovy] Class BeanAndPrefixStack

    +

    [Groovy] Class FormFieldsTagLib.BeanAndPrefixStack

      -
              • grails.plugin.formfields.FormFieldsTagLib.BeanAndPrefixStack +
                  • grails.plugin.formfields.FormFieldsTagLib.BeanAndPrefixStack
                  • + +
                    + +
                    class FormFieldsTagLib.BeanAndPrefixStack
                    +extends java.util.Stack<BeanAndPrefix>
                  @@ -121,6 +126,27 @@

                  [Groovy] Class BeanA + + + @@ -165,24 +191,6 @@

                  Methods Summary

                  -
                • -

                  Inherited Methods Summary

                  -
                    - - - - - - - - - - - -
                    Inherited Methods 
                    Methods inherited from className
                    class java.util.Stackjava.util.Stack#push(java.lang.Object), java.util.Stack#pop(), java.util.Stack#peek(), java.util.Stack#empty(), java.util.Stack#search(java.lang.Object), java.util.Stack#add(java.lang.Object), java.util.Stack#add(int, java.lang.Object), java.util.Stack#remove(java.lang.Object), java.util.Stack#remove(int), java.util.Stack#get(int), java.util.Stack#equals(java.lang.Object), java.util.Stack#toString(), java.util.Stack#hashCode(), java.util.Stack#clone(), java.util.Stack#indexOf(java.lang.Object, int), java.util.Stack#indexOf(java.lang.Object), java.util.Stack#clear(), java.util.Stack#isEmpty(), java.util.Stack#lastIndexOf(java.lang.Object, int), java.util.Stack#lastIndexOf(java.lang.Object), java.util.Stack#contains(java.lang.Object), java.util.Stack#replaceAll(java.util.function.UnaryOperator), java.util.Stack#size(), java.util.Stack#subList(int, int), java.util.Stack#toArray(), java.util.Stack#toArray([Ljava.lang.Object;), java.util.Stack#iterator(), java.util.Stack#spliterator(), java.util.Stack#addAll(java.util.Collection), java.util.Stack#addAll(int, java.util.Collection), java.util.Stack#addElement(java.lang.Object), java.util.Stack#elementAt(int), java.util.Stack#elements(), java.util.Stack#forEach(java.util.function.Consumer), java.util.Stack#set(int, java.lang.Object), java.util.Stack#capacity(), java.util.Stack#ensureCapacity(int), java.util.Stack#trimToSize(), java.util.Stack#copyInto([Ljava.lang.Object;), java.util.Stack#setSize(int), java.util.Stack#firstElement(), java.util.Stack#lastElement(), java.util.Stack#setElementAt(java.lang.Object, int), java.util.Stack#removeElementAt(int), java.util.Stack#insertElementAt(java.lang.Object, int), java.util.Stack#removeElement(java.lang.Object), java.util.Stack#removeAllElements(), java.util.Stack#containsAll(java.util.Collection), java.util.Stack#removeAll(java.util.Collection), java.util.Stack#retainAll(java.util.Collection), java.util.Stack#listIterator(), java.util.Stack#listIterator(int), java.util.Stack#removeIf(java.util.function.Predicate), java.util.Stack#sort(java.util.Comparator), java.util.Stack#wait(long, int), java.util.Stack#wait(long), java.util.Stack#wait(), java.util.Stack#getClass(), java.util.Stack#notify(), java.util.Stack#notifyAll(), java.util.Stack#stream(), java.util.Stack#parallelStream()
                    -
                  -
                • - @@ -201,6 +209,24 @@

                  Inherited Methods Summary

                  + +
                    +
                  • + + +

                    Constructor Detail

                    + + +
                      +
                    • +

                      FormFieldsTagLib.BeanAndPrefixStack()

                      +

                      +
                    • +
                    + +
                  • +
                  + @@ -277,11 +303,11 @@

                  java.lang.String toString()

                  Groovy Documentation

                  diff --git a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.html b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.html index 3bc78ec6..bcdab08e 100644 --- a/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.html +++ b/snapshot/api/grails/plugin/formfields/FormFieldsTagLib.html @@ -26,9 +26,9 @@ - - FormFieldsTagLib (fields "${RELEASE_VERSION}" API) - + + FormFieldsTagLib (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
                  @@ -98,6 +98,12 @@

                  [Groovy] Class FormFie
                • + +
                  + +
                  @groovy.util.logging.Slf4j
                  +class FormFieldsTagLib
                  +extends java.lang.Object
                • @@ -169,7 +175,7 @@

                  Field Summary

                  -
                    +
                    • Properties Summary

                        @@ -188,7 +194,7 @@

                        Properties Summary

                        java.lang.Object  all
                        attr:
                        bean REQUIRED Name of the source bean in the GSP model.
                        - + @@ -209,28 +215,28 @@

                        Properties Summary

                        java.lang.Object  display
                        attr:
                        bean Name of the source bean in the GSP model.
                        - + java.lang.Object  displayWidget
                        attr:
                        bean Name of the source bean in the GSP model.
                        - + - org.grails.scaffolding.model.DomainModelService  + DomainModelService  domainModelService
                        java.lang.Object  field
                        attr:
                        bean Name of the source bean in the GSP model.
                        - + - org.grails.scaffolding.model.property.DomainPropertyFactory  + DomainPropertyFactory  fieldsDomainPropertyFactory
                        @@ -242,7 +248,7 @@

                        Properties Summary

                        java.lang.Object  input
                        deprecated:
                        since version 1.5 - Use widget instead
                        attr:
                        bean Name of the source bean in the GSP model.
                        - + @@ -278,18 +284,19 @@

                        Properties Summary

                        java.lang.Object  widget
                        attr:
                        bean Name of the source bean in the GSP model.
                        - + java.lang.Object  with
                        attr:
                        bean REQUIRED Name of the source bean in the GSP model.
                        - +
                    • +
                    @@ -297,6 +304,27 @@

                    Properties Summary

                    + +
                      +
                    • +

                      Constructor Summary

                      +
                        + + + + + + + + + + +
                        Constructors 
                        Constructor and description
                        + FormFieldsTagLib()
                        +
                      +
                    • +
                    + @@ -345,23 +373,29 @@

                    Methods Summary

                    - java.lang.CharSequence - renderDefaultInput(java.util.Map model, java.util.Map attrs = [:])
                    + protected java.lang.CharSequence + renderDefaultField(java.util.Map model, java.util.Map attrs)
                    java.lang.CharSequence - renderDefaultInput(BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs = [:])
                    + renderDefaultInput(java.util.Map model, java.util.Map attrs)
                    java.lang.CharSequence - renderNumericInput(BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs)
                    + renderDefaultInput(BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs)
                    + + java.lang.CharSequence + renderNumericInput(BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs)
                    + + + java.lang.CharSequence renderStringInput(java.util.Map model, java.util.Map attrs)
                    @@ -383,7 +417,7 @@

                    Inherited Methods Summary

                    class java.lang.Object - java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() + java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
                  @@ -440,8 +474,7 @@

                  static final java.lang.String STACK_PAGE_SCOPE_VARIABLE
                • java.lang.Object all

                  -

                  attr:
                  bean REQUIRED Name of the source bean in the GSP model.
                  attr:
                  order A comma-separated list of properties to include in provided order
                  attr:
                  except A comma-separated list of properties to exclude from the generated list of input fields
                  attr:
                  prefix Prefix to add to input element names.
                  -

                  +

                  attr:
                  bean REQUIRED Name of the source bean in the GSP model.
                  attr:
                  order A comma-separated list of properties to include in provided order
                  attr:
                  except A comma-separated list of properties to exclude from the generated list of input fields
                  attr:
                  prefix Prefix to add to input element names.

                • @@ -473,8 +506,7 @@

                  static java.lang.Object defaultEncodeAs

                  • java.lang.Object display

                    -

                    attr:
                    bean Name of the source bean in the GSP model.
                    attr:
                    property The name of the property to display. This is resolved against the specified bean or the bean in the current scope.
                    attr:
                    order A comma-separated list of properties to include in provided order
                    attr:
                    except A comma-separated list of properties to exclude
                    attr:
                    theme Theme name
                    -

                    +

                    attr:
                    bean Name of the source bean in the GSP model.
                    attr:
                    property The name of the property to display. This is resolved against the specified bean or the bean in the current scope.
                    attr:
                    order A comma-separated list of properties to include in provided order
                    attr:
                    except A comma-separated list of properties to exclude
                    attr:
                    theme Theme name
                    attr:
                    template OPTIONAL The template used when rendering the domainClass

                  @@ -483,15 +515,14 @@

                  java.lang.Object display

                • java.lang.Object displayWidget

                  attr:
                  bean Name of the source bean in the GSP model.
                  attr:
                  property REQUIRED The name of the property to display. This is resolved - against the specified bean or the bean in the current scope.
                  attr:
                  theme Theme name
                  -

                  + against the specified bean or the bean in the current scope.
                  attr:
                  theme Theme name

                  • -

                    org.grails.scaffolding.model.DomainModelService domainModelService

                    +

                    DomainModelService domainModelService

                  @@ -505,15 +536,14 @@

                  java.lang.Object field

                  the current value of the property.
                  attr:
                  default A default initial value to display if the actual property value evaluates to false.
                  attr:
                  required Specifies whether the user is required to enter a value for this property. By default, this is determined by the constraints of the property.
                  attr:
                  invalid Specifies whether this property is invalid or not. By default, this - is determined by whether there are any errors associated with it.
                  attr:
                  label Overrides the default label displayed next to the input field.
                  attr:
                  prefix Prefix to add to input element names.
                  attr:
                  wrapper Specify the folder inside _fields where to look up for the wrapper template.
                  attr:
                  widget Specify the folder inside _fields where to look up for the widget template.
                  attr:
                  templates Specify the folder inside _fields where to look up for the wrapper and widget template.
                  attr:
                  theme Theme name
                  -

                  + is determined by whether there are any errors associated with it.
                  attr:
                  label Overrides the default label displayed next to the input field.
                  attr:
                  prefix Prefix to add to input element names.
                  attr:
                  wrapper Specify the folder inside _fields where to look up for the wrapper template.
                  attr:
                  widget Specify the folder inside _fields where to look up for the widget template.
                  attr:
                  templates Specify the folder inside _fields where to look up for the wrapper and widget template.
                  attr:
                  theme Theme name
                  attr:
                  css html css attribute for wrapper (default: field-contain)
                  attr:
                  divClass class for optional div that will be added if set and contain the widget (default: no div created)
                  attr:
                  invalidClass class added to wrapper that if property is invalid. (default: error) Also available for widget.
                  attr:
                  requiredClass class added to wrapper when property is required. (default: required) Also available for widget.

                  • -

                    org.grails.scaffolding.model.property.DomainPropertyFactory fieldsDomainPropertyFactory

                    +

                    DomainPropertyFactory fieldsDomainPropertyFactory

                  @@ -531,8 +561,7 @@

                  F
                • java.lang.Object input

                  deprecated:
                  since version 1.5 - Use widget instead
                  attr:
                  bean Name of the source bean in the GSP model.
                  attr:
                  property REQUIRED The name of the property to display. This is resolved - against the specified bean or the bean in the current scope.
                  -

                  + against the specified bean or the bean in the current scope.

                • @@ -547,8 +576,7 @@

                  org.springframework.web.servlet.LocaleResolver localeResolver
                  • -

                    @org.springframework.beans.factory.annotation.Value('${grails.plugin.fields.localizeNumbers:true}') -java.lang.Boolean localizeNumbers

                    +

                    @org.springframework.beans.factory.annotation.Value(value: ${grails.plugin.fields.localizeNumbers:true})
                    java.lang.Boolean localizeNumbers

                  @@ -556,8 +584,7 @@

                  @org.springframework.beans.factory.annotation.Value('${grails.plugin.fields.
                  • -

                    @org.springframework.beans.factory.annotation.Autowired(required = false) -java.util.Collection<org.grails.datastore.mapping.model.MappingContext> mappingContexts

                    +

                    @org.springframework.beans.factory.annotation.Autowired(required: false)
                    java.util.Collection<org.grails.datastore.mapping.model.MappingContext> mappingContexts

                  @@ -584,8 +611,7 @@

                  static final java.lang.Object namespace

                  java.lang.Object table

                  Renders a collection of beans in a table

                  attr:
                  collection REQUIRED The collection of beans to render
                  attr:
                  domainClass The FQN of the domain class of the elements in the collection. Defaults to the class of the first element in the collection.
                  attr:
                  properties OPTIONAL The list of properties to be shown (table columns).
                  attr:
                  maxProperties OPTIONAL The number of properties displayed when no explicit properties are given, defaults to 7.
                  attr:
                  displayStyle OPTIONAL Determines the display template used for the bean's properties. - Defaults to 'table', meaning that 'display-table' templates will be used when available.
                  attr:
                  order A comma-separated list of properties to include in provided order
                  attr:
                  except A comma-separated list of properties to exclude
                  attr:
                  theme Theme name
                  attr:
                  template OPTIONAL The template used when rendering the collection
                  -

                  + Defaults to 'table', meaning that 'display-table' templates will be used when available.
                  attr:
                  order A comma-separated list of properties to include in provided order
                  attr:
                  except A comma-separated list of properties to exclude
                  attr:
                  theme Theme name
                  attr:
                  template OPTIONAL The template used when rendering the collection

                  @@ -594,8 +620,7 @@

                  java.lang.Object table

                • java.lang.Object widget

                  attr:
                  bean Name of the source bean in the GSP model.
                  attr:
                  property REQUIRED The name of the property to display. This is resolved - against the specified bean or the bean in the current scope.
                  attr:
                  theme Theme name
                  -

                  + against the specified bean or the bean in the current scope.
                  attr:
                  theme Theme name

                • @@ -603,8 +628,7 @@

                  java.lang.Object widget

                  • java.lang.Object with

                    -

                    attr:
                    bean REQUIRED Name of the source bean in the GSP model.
                    attr:
                    prefix Prefix to add to input element names.
                    -

                    +

                    attr:
                    bean REQUIRED Name of the source bean in the GSP model.
                    attr:
                    prefix Prefix to add to input element names.

                  @@ -615,6 +639,24 @@

                  java.lang.Object with

                  + +
                    +
                  • + + +

                    Constructor Detail

                    + + +
                      +
                    • +

                      FormFieldsTagLib()

                      +

                      +
                    • +
                    + +
                  • +
                  + @@ -636,8 +678,7 @@

                  BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs = [:])

                  +

                  java.lang.CharSequence renderDefaultInput(BeanPropertyAccessor propertyAccessor, java.util.Map model, java.util.Map attrs)

                  @@ -734,11 +781,11 @@

                  java.lang.CharSequence renderStringInput(java.util.Map mode

                  Groovy Documentation

                  diff --git a/snapshot/api/grails/plugin/formfields/FormFieldsTemplateService.html b/snapshot/api/grails/plugin/formfields/FormFieldsTemplateService.html index ebbe6e9d..0b85ef2d 100644 --- a/snapshot/api/grails/plugin/formfields/FormFieldsTemplateService.html +++ b/snapshot/api/grails/plugin/formfields/FormFieldsTemplateService.html @@ -26,9 +26,9 @@ - - FormFieldsTemplateService (fields "${RELEASE_VERSION}" API) - + + FormFieldsTemplateService (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -70,11 +70,11 @@
                  @@ -98,6 +98,13 @@

                  [Groovy] Clas
                • + +
                  + +
                  @groovy.util.logging.Slf4j
                  +@groovy.transform.CompileStatic
                  +class FormFieldsTemplateService
                  +extends java.lang.Object
                • @@ -146,7 +153,7 @@

                  Field Summary

                  -
                    +
                    • Properties Summary

                        @@ -175,6 +182,7 @@

                        Properties Summary

                    • +
                    @@ -182,6 +190,27 @@

                    Properties Summary

                    + +
                      +
                    • +

                      Constructor Summary

                      + +
                    • +
                    + @@ -201,7 +230,7 @@

                    Methods Summary

                    java.util.Map - findTemplate(BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme = null)
                    + findTemplate(BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme)
                    @@ -213,7 +242,7 @@

                    Methods Summary

                    protected java.lang.String - getWidget(org.grails.scaffolding.model.property.Constrained cp, java.lang.Class propertyType)
                    + getWidget(Constrained cp, java.lang.Class propertyType)
                    @@ -244,7 +273,7 @@

                    Inherited Methods Summary

                    class java.lang.Object - java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() + java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
                  @@ -300,8 +329,7 @@

                  Property Detail

                  • -

                    @org.springframework.beans.factory.annotation.Autowired -grails.core.GrailsApplication grailsApplication

                    +

                    @org.springframework.beans.factory.annotation.Autowired
                    grails.core.GrailsApplication grailsApplication

                  @@ -309,8 +337,7 @@

                  @org.springframework.beans.factory.annotation.Autowired
                  • -

                    @org.springframework.beans.factory.annotation.Autowired -org.grails.web.gsp.io.GrailsConventionGroovyPageLocator groovyPageLocator

                    +

                    @org.springframework.beans.factory.annotation.Autowired
                    org.grails.web.gsp.io.GrailsConventionGroovyPageLocator groovyPageLocator

                  @@ -318,8 +345,7 @@

                  @org.springframework.beans.factory.annotation.Autowired
                  • -

                    @org.springframework.beans.factory.annotation.Autowired -grails.plugins.GrailsPluginManager pluginManager

                    +

                    @org.springframework.beans.factory.annotation.Autowired
                    grails.plugins.GrailsPluginManager pluginManager

                  @@ -331,6 +357,24 @@

                  @org.springframework.beans.factory.annotation.Autowired + +
                    +
                  • + + +

                    Constructor Detail

                    + + +
                      +
                    • +

                      FormFieldsTemplateService()

                      +

                      +
                    • +
                    + +
                  • +
                  + @@ -344,7 +388,7 @@

                  Method Detail

                  • -

                    java.util.Map findTemplate(BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme = null)

                    +

                    java.util.Map findTemplate(BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme)

                  @@ -360,7 +404,7 @@

                  java.lang.String getTemplateFor(java.lang.String property)<
                  • -

                    protected java.lang.String getWidget(org.grails.scaffolding.model.property.Constrained cp, java.lang.Class propertyType)

                    +

                    protected java.lang.String getWidget(Constrained cp, java.lang.Class propertyType)

                  @@ -415,11 +459,11 @@

                  static java.lang.String toPropertyNameFormat(java.lang

                  Groovy Documentation

                  diff --git a/snapshot/api/grails/plugin/formfields/PropertyPathAccessor.html b/snapshot/api/grails/plugin/formfields/PropertyPathAccessor.html index 5c8c3ca6..fc5fbccb 100644 --- a/snapshot/api/grails/plugin/formfields/PropertyPathAccessor.html +++ b/snapshot/api/grails/plugin/formfields/PropertyPathAccessor.html @@ -26,9 +26,9 @@ - - PropertyPathAccessor (fields "${RELEASE_VERSION}" API) - + + PropertyPathAccessor (fields 6.0.0-SNAPSHOT API) + @@ -37,7 +37,7 @@ @@ -101,17 +101,17 @@

                  [Groovy] Class Pro
                  All Implemented Interfaces and Traits:
                  BeanPropertyAccessor
                  + +
                  -
                  +
                  @groovy.transform.CompileStatic
                  -@groovy.transform.Canonical(includes = ['beanType', 'propertyName', 'propertyType'])
                  +@groovy.transform.Canonical
                  +@groovy.transform.ToString(includes: [beanType, propertyName, propertyType])
                   class PropertyPathAccessor
                   extends java.lang.Object
                  -
                  -
                  - - +implements BeanPropertyAccessor @@ -130,7 +130,7 @@

                  [Groovy] Class Pro -
                    +
                    • Properties Summary

                        @@ -164,6 +164,7 @@

                        Properties Summary

                    • +
                    @@ -184,8 +185,7 @@

                    Constructor Summary

                    - PropertyPathAccessor - (java.lang.String pathFromRoot)
                    + PropertyPathAccessor(java.lang.String pathFromRoot)
                    @@ -223,7 +223,7 @@

                    Methods Summary

                    - org.grails.scaffolding.model.property.Constrained + Constrained getConstraints()
                    @@ -309,7 +309,7 @@

                    Inherited Methods Summary

                    class java.lang.Object - java.lang.Object#wait(long, int), java.lang.Object#wait(long), java.lang.Object#wait(), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll() + java.lang.Object#wait(long, int), java.lang.Object#wait(), java.lang.Object#wait(long), java.lang.Object#equals(java.lang.Object), java.lang.Object#toString(), java.lang.Object#hashCode(), java.lang.Object#getClass(), java.lang.Object#notify(), java.lang.Object#notifyAll()
                  @@ -422,7 +422,7 @@

                  java.util.List<java.lang.Class> getBeanSuperclasses()
                  • -

                    org.grails.scaffolding.model.property.Constrained getConstraints()

                    +

                    Constrained getConstraints()

                  diff --git a/snapshot/api/grails/plugin/formfields/package-summary.html b/snapshot/api/grails/plugin/formfields/package-summary.html index 9c90f7bb..6e062619 100644 --- a/snapshot/api/grails/plugin/formfields/package-summary.html +++ b/snapshot/api/grails/plugin/formfields/package-summary.html @@ -22,7 +22,7 @@ -grails.plugin.formfields (fields "${RELEASE_VERSION}" API) +grails.plugin.formfields (fields 6.0.0-SNAPSHOT API) @@ -31,7 +31,7 @@

                  diff --git a/snapshot/api/overview-summary.html b/snapshot/api/overview-summary.html index 0bef2efe..a2748937 100644 --- a/snapshot/api/overview-summary.html +++ b/snapshot/api/overview-summary.html @@ -22,7 +22,7 @@ -Overview (fields "${RELEASE_VERSION}" API) +Overview (fields 6.0.0-SNAPSHOT API) @@ -32,7 +32,7 @@ @@ -66,7 +66,7 @@
                  -

                  fields "${RELEASE_VERSION}" API

                  +

                  fields 6.0.0-SNAPSHOT API

                  @@ -90,6 +90,48 @@

                  fields "${RELEASE_VERSION}" API

                  + + org.grails.scaffolding +   + + + + + org.grails.scaffolding.markup +   + + + + + org.grails.scaffolding.model +   + + + + + org.grails.scaffolding.model.property +   + + + + + org.grails.scaffolding.registry +   + + + + + org.grails.scaffolding.registry.input +   + + + + + org.grails.scaffolding.registry.output +   + + +
                  diff --git a/snapshot/api/package-list b/snapshot/api/package-list index fa57a5ea..266ad018 100644 --- a/snapshot/api/package-list +++ b/snapshot/api/package-list @@ -1 +1,8 @@ grails.plugin.formfields +org.grails.scaffolding +org.grails.scaffolding.markup +org.grails.scaffolding.model +org.grails.scaffolding.model.property +org.grails.scaffolding.registry +org.grails.scaffolding.registry.input +org.grails.scaffolding.registry.output diff --git a/snapshot/index.html b/snapshot/index.html index 402a0c2b..17519de3 100644 --- a/snapshot/index.html +++ b/snapshot/index.html @@ -1,28 +1,26 @@ - + - + Fields Plugin + @@ -537,210 +628,221 @@

                  Introduction

                  +
                  +

                  Find the Changelog here

                  +
                  -

                  Changelog

                  +

                  Installation

                  -
                  -

                  Version 4.0.0-RC1 - Grails 4.1.x

                  -

                  Important

                  +

                  The plugin is available on Maven Central and should be a dependency like this:

                  +
                  +
                  +
                  +
                  dependencies {
                  +    implementation 'io.github.gpc:fields:6.0.0-SNAPSHOT'
                  +}
                  +
                  +
                  +
                  +
                  +
                  +

                  Usage

                  +
                  +
                  +

                  The plugin provides a set of tags you can use to render the fields in a form.

                  -

                  New group id. In your build.gradle file, use:

                  +

                  In the simplest case you can use f:all to render a field for every property of a bean (the domain object or command the form will bind to):

                  -
                  compile 'io.github.gpc:fields:4.0.0-RC1'
                  +
                  <g:form…>
                  +    <f:all bean="person"/>
                  +</g:form>
                  -

                  Changelog: -https://github.com/gpc/fields/compare/v3.0.0.RC1…​v4.0.0-RC1

                  +

                  To render individual fields you use the f:field tag:

                  +
                  +
                  +
                  +
                  <g:form…>
                  +    <f:field bean="person" property="name"/>
                  +    <f:field bean="person" property="address"/>
                  +    <f:field bean="person" property="dateOfBirth"/>
                  +</g:form>
                  +
                  -

                  Thank you for all the contributions!

                  +

                  The f:field tag will automatically handle embedded domain properties recursively:

                  +
                  +
                  +
                  +
                  <f:field bean="person" property="address"/>
                  -
                  -

                  Version 3.0.0.RC1 - Grails 4.0.x

                  -

                  Last version that is on the "old" group org.grails.plugins

                  +

                  If there is no bean object backing a form but you still want to render the surrounding field markup you can give f:field a body:

                  +
                  +
                  +
                  +
                  <f:field property="password">
                  +    <g:password name="password"/>
                  +</f:field>
                  +
                  -

                  Changelog: -https://github.com/gpc/fields/compare/v2.2.10…​v3.0.0.RC1

                  +

                  It should be an unusual case but to render just the widget without its surrounding container you can use the f:widget tag:

                  +
                  +
                  +
                  +
                  <f:widget bean="person" property="name"/>
                  +
                  +
                  +
                  +

                  To make it more convenient when rendering lots of properties of the same bean you can use the f:with tag to avoid having to specify bean on any tags nested inside:

                  +
                  +
                  +
                  +
                  <g:form…>
                  +    <f:with bean="person">
                  +        <f:field property="name"/>
                  +        <f:field property="address"/>
                  +        <f:field property="dateOfBirth"/>
                  +    </f:with>
                  +</g:form>
                  +
                  +
                  +
                  +

                  If you need to render a property for display purposes you can use f:display. It will internally use g:fieldValue, g:formatBoolean or g:formatDate to format the value.

                  +
                  +
                  +
                  +
                  <f:display bean="person" property="name"/>
                  +
                  +
                  +
                  +

                  If you need to render the value in a different way you can give f:display a body instead.

                  +
                  +
                  +
                  +
                  <f:display bean="person" property="dateOfBirth">
                  +    <g:formatDate format="dd MMM yyyy" date="${value}"/>
                  +</f:display>
                  +
                  +
                  +
                  +

                  By default f:display simply renders the property value but if you supply a \_display.gsp template you can render the value in some structured markup, e.g. a table cell or list item. See the Customizing Field Rendering section for how to override templates. For example to render values in a definition list you could use a template like this:

                  +
                  +
                  +
                  +
                  <dt>${label}</dt>
                  +<dd>${value}</dd>
                  -

                  Version 2.2.9.BUILD-SNAPSHOT

                  +

                  Extra attributes (Since version 2.1.4)

                  -

                  Changelog: -https://github.com/grails-fields-plugin/grails-fields/compare/v2.2.8…​v2.2.9

                  +

                  You can pass any number of extra attributes to the f:with and f:all tags that will be propagated to the inner fields and displays. +See their individual tags sections for more information.

                  -

                  Version 2.2.8

                  +

                  Breaking changes

                  + +
                  +
                  +

                  Templates

                  +
                  +

                  The names of the templates were changed for more adequate ones:

                  +
                  • -

                    BugFix: Table Tag does not render transient fields correctly (Issue #264)

                    +

                    _field to _wrapper

                  • -

                    BugFix: Table Tag does not render references correctly! (Issue #269)

                    +

                    _input to _widget

                  • -

                    BugFix: Fix XSS vulnerability when rendering beans (Issue #278) -GitHub diff

                    -
                  • -
                  -
                  -
                  -
                  -

                  Version 2.2.7

                  -
                  -
                    -
                  • -

                    BugFix: The fix for #257 did not work as described, but now it does.

                    -
                  • -
                  • -

                    Improvement: Documentation has been improved with more examples for the various tags. -GitHub diff

                    -
                  • -
                  -
                  -
                  -
                  -

                  Version 2.2.6

                  -
                  -
                    -
                  • -

                    Improvement: Documentation of maxProperties on <f:table/>

                    +

                    _display to _displayWrapper

                  • -

                    Improvement: <f:table\> can now show id, lastUpdated and dateCreated (see f:table doc). Injecting DomainModelService instead of instantiating DomainModelServiceImpl in FormsFieldTagLib (Issue #257)

                    +

                    _displayWidget was added

                  +

                  To use the old names (for backwards compatibility), configure the following in Config.groovy

                  -
                  -

                  Version 2.2.4/2.2.5

                  -
                  -
                    -
                  • -

                    Improvement: Introduced maxProperties attribute to <f:table/>

                    -
                  • -
                  • -

                    Improvement: Render value that is an association but not to a grom entity

                    -
                  • -
                  • -

                    Improvement: Rendering numbers is now Locale-aware (can be configured)

                    -
                  • -
                  +
                  +
                  +
                  grails.plugin.fields.wrapper = "field"
                  +grails.plugin.fields.displayWrapper = "display"
                  +grails.plugin.fields.widget = "input"
                  -
                  -

                  Version 2.2.3

                  -
                  -
                    -
                  • -

                    Bug-fix: Another issue with old API

                    -
                  • -
                  +

                  Widget attributes

                  +
                  +

                  To pass additional attributes to widgets, prefix them with widget-.

                  -

                  GitHub diff

                  +

                  Example:

                  +
                  +
                  +
                  <f:field property="birthDate" widget-format="dd/MM/yyyy"/>
                  -
                  -

                  Version 2.2.2

                  -
                  -
                    -
                  • -

                    Bug-fix: Fix issue with oneToMany expecting the old API

                    -
                  • -
                  +

                  To use the old prefix (for backwards compatibility), configure the following in Config.groovy:

                  -
                  -

                  Version 2.2.1

                  -
                  -
                    -
                  • -

                    Bug-fix: Autowire beans

                    -
                  • -
                  +
                  +
                  +
                  grails.plugin.fields.widgetPrefix = "input-"
                  -
                  -

                  Version 2.2.0

                  +

                  Changes in tags

                  • -

                    Conversion to the Mapping Context API. Usages of the GrailsDomainClass and GrailsDomainClassProperty classes have been removed. If you extend a template that relies on those classes, they have been replaced with PersistentEntity and DomainProperty respectively.

                    +

                    The f:input tag was deprecated because the name was confusing. Use the new f:widget tag instead.

                  • -

                    Conversion of constraints to a common implementation between grails.validation and grails.gorm.validation. See Constrained.

                    +

                    The f:displayWidget tag was added. It outputs the widget for display purposes, without the wrapper (similar to the widget tag).

                  -
                  -

                  Version 2.1.4

                  -
                  -
                    -
                  • -

                    Upgrade to Grails 3.2.8

                    -
                  • -
                  • -

                    Convert documentation to Asciidoc

                    -
                  • -
                  • -

                    Add support for themes

                    -
                  • -
                  -
                  +

                  Localized numbers

                  -

                  GitHub diff from 2.1.1 to 2.1.4

                  +

                  All numbers are now rendered localized. This means that when using Locale.ENGLISH the number 1000.50 is represented +as 1,000.50 but with Locale.GERMAN is represented as 1.000,50. To use the old behavior (for backwards compatibility) +without localizing the numbers, configure the following in Config.groovy:

                  +
                  +
                  +
                  grails.plugin.fields.localizeNumbers = false
                  -
                  -

                  Version 2.0

                  -
                  -
                    -
                  • -

                    Redesign for Grails 3.0

                    -
                  • -
                  -
                  -

                  Version 1.5

                  -
                  -

                  2015_04_26

                  -
                  - +
                  +
                  +

                  Customizing Field Rendering

                  +
                  +
                  +

                  The plugin resolves the GSP template used for each property according to conventions. You can override the rendering based +on the class and property name or the property type. The f:field tag looks for a template called _wrapper.gsp, the f:widget +tag looks for a template called _widget.gsp, the f:display tag looks for a template called _displayWrapper.gsp.

                  @@ -749,1140 +851,1454 @@

                  Version 1.5

                  -See Usage and Customizing Field Rendering for breaking changes. +Breaking changes in version 1.5
                  +
                  +

                  In version 1.5 a new template was introduced _displayWidget.gsp. This is the corollary of _widget.gsp for fields that +are read-only, i.e. it is responsible for rendering just the markup for the field itself. Furthermore, the default names +of all the templates were changed in this version, in the interest of clarity and consistency. The changes to the template +names are summarized below:

                  +
                  + + ++++ + + + + + + + + + + + + + + + + + + + + +
                  Table 1. Template Name Changes
                  Old Template Name (before v.1.5)New Template Name (v.1.5 onwards)

                  _field.gsp

                  _wrapper.gsp

                  _display.gsp

                  _displayWrapper.gsp

                  N/A

                  _displayWidget.gsp

                  +
                  +

                  Users upgrading to 1.5 from a previous version should either rename their templates (recommended) or add the following +to grails-app/conf/application.yml to change the default templates names to the old names

                  +
                  +
                  +
                  +
                  grails:
                  +    plugin:
                  +        fields:
                  +            wrapper: field
                  +            displayWrapper: display
                  +            widget: input
                  +            displayWidget: displayWidget
                  +
                  -

                  Version 1.4

                  +

                  Locating Field Templates by Convention

                  +
                  +

                  The template for a field is chosen by a convention using the names of the controller, action, bean class, bean property, theme, etc. All the tags will look for templates in the following directories in decreasing order of preference:

                  +
                  • -

                    Upgraded plugin to work with Grails 2.3.x (Issue #122)

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyName*/_themes/*themeName*/

                  • -

                    Fixed missing property exception (Issue #134)

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/_themes/*themeName*/*propertyType*/

                  • -

                    Fixed encoding in tag libraries (Issue #137)

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/_themes/*themeName*/

                  • -

                    Configuring caching in dev mode (Issue #139)

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyName*/_themes/*themeName*/

                  • -

                    byte[] and Byte[] arrays types now look for files in byteArray folders (general for all array types) (Issue #144)

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/_themes/*themeName*/*propertyType*/

                  • -
                  -
                  - -
                  -
                  -

                  Version 1.3

                  -
                  -

                  2012-07-31

                  -
                  -
                  -
                  • -

                    Adds the f:display tag.

                    +

                    grails-app/views/*controllerNamespace*/*controllerName*/_themes/*themeName*/

                  • -

                    Supports overriding templates by property type or by default in individual controllers and actions.

                    +

                    grails-app/views/*controllerName*/*actionName*/*propertyName*/_themes/*themeName*/

                  • -
                  -
                  -
                  -

                  Browse issues -Thanks to https://github.com/cdeszaq,[Rick Jensen] https://github.com/delight,[Konstantinos Kostarellis] Gus Power and Eliot Sykes for their contributions.

                  -
                  -
                  -
                  -

                  Version 1.2

                  -
                  -

                  2012-03-16

                  -
                  -
                  -
                  • -

                    Pass attributes from f:field to the rendered input using input- prefix.

                    +

                    grails-app/views/*controllerName*/*actionName*/_themes/*themeName*/*propertyType*/

                  • -

                    Optionally use entire property path for label key.

                    +

                    grails-app/views/*controllerName*/*actionName*/_themes/*themeName*/

                  • -
                  -
                  -
                  -

                  Browse issues -Thanks to Brian Saville and OverZealous for contributions.

                  -
                  -
                  -
                  -

                  Version 1.1

                  -
                  -

                  2012-03-11

                  -
                  -
                  -
                  • -

                    Adds the prefix attribute.

                    +

                    grails-app/views/*controllerName*/*propertyName*/_themes/*themeName*/

                  • -

                    Support widget:'textarea' constraint.

                    +

                    grails-app/views/*controllerName*/_themes/*themeName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/_themes/*themeName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/*class*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/*superclass*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/*associationType*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/*propertySuperclass*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/_themes/*themeName*/default/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerNamespace*/*controllerName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/*class*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/*superclass*/*propertyName*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/*associationType*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/*propertyType*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/*propertySuperclass*/

                    +
                  • +
                  • +

                    grails-app/views/_fields/default/

                  -

                  Browse issues -Thanks to Brian Saville for contributions.

                  +

                  The variables referenced in these paths are:

                  +
                  + + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  Table 2. Referenced Variables
                  NameDescription

                  controllerName

                  The name of the current controller (if any).

                  actionName

                  The name of the current action (if any).

                  themeName

                  Theme name specified as value of theme attribute (Optional).

                  class

                  The bean class. For simple properties this is the class of the object passed to the bean attribute of the f:field or f:widget tag but when the property attribute was nested this is the class at the end of the chain. For example, if the property path was employees[0].address.street this will be the class of address.

                  superclass

                  Any superclass or interface of class excluding Object, GroovyObject, Serializable, Comparable and Cloneable and those from GORM.

                  propertyName

                  The property name at the end of the chain passed to the property attribute of the f:field or f:widget tag. For example, if the property path was employees[0].address.street then this will be street.

                  propertyType

                  The type of the property at the end of the chain passed to the property attribute of the f:field or f:widget tag. For example, for a java.lang.String property this would be string.

                  propertySuperclass

                  Any superclass or interface of propertyType excluding Object, GroovyObject, Serializable, Comparable and Cloneable.

                  associationType

                  One of 'oneToOne', 'oneToMany', 'manyToMany' or 'manyToOne'. Only relevant if the property is a domain class association.

                  +
                  +

                  All class names are camel-cased simple forms. For example java.lang.String becomes string, and com.project.HomeAddress becomes homeAddress.

                  +
                  +
                  +

                  Templates are resolved in this order so that you can override in the more specific circumstance and fall back to successively more general defaults. For example, you can define a field template for all java.lang.String properties but override a specific property of a particular class to use more specialized rendering.

                  +
                  +
                  +

                  Templates in plugins are resolved as well. This means plugins such as Joda Time can provide default rendering for special property types. A template in your application will take precedence over a template in a plugin at the same level. For example if a plugin provides a grails-app/views/_fields/string/_widget.gsp the same template in your application will override it but if the plugin provides grails-app/views/_fields/person/name/_widget.gsp it would be used in preference to the more general template in your application.

                  +
                  +
                  +

                  For most properties the out-of-the-box defaults should provide a good starting point.

                  -

                  Version 1.0.4

                  +

                  Locating Templates Conventionally Example

                  -

                  2012-02-13: Bugfix release.

                  +

                  Imagine an object of class Employee that extends the class Person and has a String name property.

                  -

                  Browse issues

                  +

                  You can override the template f:field uses with any of these:

                  +
                  +
                  +
                    +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/string/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/name/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/string/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/employee/name/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/person/name/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/string/_wrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/default/_wrapper.gsp

                    +
                  • +
                  +
                  +
                  +

                  override the template f:widget uses with any of these:

                  +
                  +
                  +
                    +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/string/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/name/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/string/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/employee/name/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/person/name/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/string/_widget.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/default/_widget.gsp

                    +
                  • +
                  +
                  +
                  +

                  And override the template f:display uses with any of these:

                  +
                  +
                  +
                    +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/name/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/string/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/*actionName*/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/name/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/string/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/*controllerName*/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/employee/name/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/person/name/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/string/_displayWrapper.gsp

                    +
                  • +
                  • +

                    grails-app/views/_fields/default/_displayWrapper.gsp

                    +
                  • +
                  +
                  +
                  +

                  During template development it is usually recommended to disable template caching in order to allow the plugin to recognize new/renamed/moved templates without restarting the application. See the "Performance" section of the guide for the exact settings.

                  -

                  Version 1.0.3

                  +

                  See Template Seach Path

                  -

                  2012-02-09: Bugfix release.

                  +

                  The plugin logs which locations it is checking for templates as debug log. You can enable this by defining a logger in logback.groovy

                  +
                  +
                  +
                  +
                  logger('grails.plugin.formfields.FormFieldsTemplateService', DEBUG,['STDOUT'])
                  +
                  -

                  Browse issues

                  +

                  The can disable the caching in application.yml using:

                  +
                  +
                  +
                  +
                  grails:
                  +    plugin:
                  +        fields:
                  +            disableLookupCache: true
                  +
                  -

                  Version 1.0.2

                  +

                  Default Behaviour - Using Grails Widget Tags

                  -

                  2012-02-07: Bugfix release.

                  +

                  If no template override is found the plugin will use the standard grails input tags (e.g. g:select, g:checkbox, g:field) for rendering input controls. +Using f:field you can pass extra arguments (e.g. optionKey, optionValue) through to these tags by prefixing them with widget-, e.g.

                  +
                  +
                  +
                  +
                  <f:field bean="person" property="gender" widget-optionValue="name"/>
                  +
                  +
                  +
                  +

                  Template parameters

                  -

                  Browse issues

                  +

                  The f:field and f:widget tags will pass the following parameters to your templates or to the body of f:field if you use one:

                  +
                  + + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  Table 3. Template Parameters
                  NameTypeDescription

                  bean

                  Object

                  The bean attribute as passed to the f:field or f:widget tag.

                  property

                  String

                  The property attribute as passed to the f:field or f:widget tag. This would generally be useful for the name attribute of a form input.

                  type

                  Class

                  The property type.

                  label

                  String

                  The field label text. This is based on the label attribute passed to the f:field or f:widget tag. If no label attribute was used the label is resolved by convention - see below.

                  value

                  Object

                  the property value. This can also be overridden or defaulted if the value or default attribute was passed to f:field or f:widget.

                  constraints

                  ConstrainedProperty

                  The constraints for the property if the bean is a domain or command object.

                  persistentProperty

                  DomainProperty

                  The persistent property object if the bean is a domain object.

                  errors

                  List<String>

                  The error messages for any field errors present on the property. If there are no errors this will be an empty List.

                  required

                  boolean

                  true if the field is required, i.e. has a nullable: false or blank: false constraint.

                  invalid

                  boolean

                  true if the property has any field errors.

                  prefix

                  String

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  +
                  +

                  In addition f:field passes the following parameters:

                  +
                  + + +++++ + + + + + + + + + + + + +
                  Table 4. Parameter Names from f:field

                  Name

                  Type

                  Description

                  widget

                  String

                  The output of f:widget for the current bean and property if f:field was used without a tag body, otherwise the output of the tag body.

                  +
                  + + + + + +
                  + + +If the bean attribute was not supplied to f:field then bean, type, value and persistentProperty will all be null. +
                  -

                  Version 1.0.1

                  +

                  Field labels

                  -

                  2012-02-03: Bugfix release.

                  +

                  If the label attribute is not supplied to the f:field tag then the label string passed to the field template is resolved by convention. The plugin uses the following order of preference for the label:

                  -
                  -

                  Browse issues

                  +
                  +
                    +
                  • +

                    An i18n message using the key beanClass.path.label. For example when using <f:field bean="authorInstance" property="book.title"/> the plugin will try the i18n key author.book.title.label. If the property path contains any index it is removed so <f:field bean="authorInstance" property="books<<0>>.title"/> would use the key author.books.title.label.

                    +
                  • +
                  • +

                    For classes using the same bean class as properties, it is possible to get a key without the class name prefixed. If the configuration value grails.plugin.fields.i18n.addPathFromRoot is set to true (default: false). Example: a class Publisher has two Address properties authorAddress and printAddress. With addPathFromRoot=true they will share the key address.city.label. The same goes if Author and Publisher had a Book book, the key would be book.title.label, and if they both had a List<Book> books the key would be books.title.label

                    +
                  • +
                  • +

                    An i18n message using the key objectType.propertyName`.label`. For example when using <f:field bean="personInstance" property="address.city"/> the plugin will try the i18n key address.city.label.

                    +
                  • +
                  • +

                    The natural property name. For example when using <f:field bean="personInstance" property="dateOfBirth"/> the plugin will use the label "Date Of Birth".

                    +
                  • +
                  -

                  Version 1

                  -
                  -

                  2012-02-01: Initial release.

                  -
                  - -
                  -
                  -
                  -
                  -

                  Usage

                  -
                  +

                  Locating Field Templates Directly

                  -

                  The plugin provides a set of tags you can use to render the fields in a form.

                  +

                  Rather than relying on the convention described previously to locate the template(s) to be used for a particular field, it is +instead possible to directly specify the directory containing the templates. This feature was introduced in version 1.5.

                  -
                  -

                  In the simplest case you can use f:all to render a field for every property of a bean (the domain object or command the form will bind to):

                  +
                  +
                    +
                  • +

                    The wrapper attribute can be used with the f:field or f:display tags to specify the directory containing the _wrapper.gsp or _displayWrapper.gsp template to be used

                    +
                  • +
                  • +

                    The widget attribute can be used with the f:field or f:display tags to specify the directory containing the _widget.gsp or _displayWidget.gsp template to be used

                    +
                  • +
                  • +

                    If the wrapper and widget templates both have the same value, the templates attribute can be used instead as a shorthand. For example:

                    +
                  • +
                  -
                  <g:form…>
                  -    <f:all bean="person"/>
                  -</g:form>
                  +
                  <f:field property="startDate" templates="bootstrap3" />
                  -

                  To render individual fields you use the f:field tag:

                  +

                  is equivalent to:

                  -
                  <g:form…>
                  -    <f:field bean="person" property="name"/>
                  -    <f:field bean="person" property="address"/>
                  -    <f:field bean="person" property="dateOfBirth"/>
                  -</g:form>
                  +
                  <f:field property="startDate" wrapper="bootstrap3" widget="bootstrap3" />
                  -

                  The f:field tag will automatically handle embedded domain properties recursively:

                  +

                  if theme is specified, theme will be searched first to find the templates +For example

                  -
                  <f:field bean="person" property="address"/>
                  +
                  <f:field property="startDate" templates="custom" theme="bs-horizontal"/>
                  -

                  If there is no bean object backing a form but you still want to render the surrounding field markup you can give f:field a body:

                  -
                  -
                  -
                  -
                  <f:field property="password">
                  -    <g:password name="password"/>
                  -</f:field>
                  -
                  +

                  Will search the templates first in \_fields/_themes/bs-horizontal/custom and then \_fields/custom

                  -

                  It should be an unusual case but to render just the widget without its surrounding container you can use the f:widget tag:

                  -
                  -
                  -
                  -
                  <f:widget bean="person" property="name"/>
                  -
                  +

                  If a direct location is specified, and the templates cannot be found therein, the plugin will fall back to locating templates +by convention.

                  -
                  -

                  To make it more convenient when rendering lots of properties of the same bean you can use the f:with tag to avoid having to specify bean on any tags nested inside:

                  +
                  +

                  Locating Templates Directly Example

                  -
                  <g:form…>
                  -    <f:with bean="person">
                  -        <f:field property="name"/>
                  -        <f:field property="address"/>
                  -        <f:field property="dateOfBirth"/>
                  -    </f:with>
                  -</g:form>
                  +
                  // renders _fields/\_themes/bs-horizontal/custom/_wrapper.gsp:
                  +<f:field property="startDate" wrapper="custom" theme="bs-horizontal"/>
                  +
                  +// renders _fields/bootstrap3/_wrapper.gsp:
                  +<f:field property="startDate" wrapper="bootstrap3"/>
                  +
                  +// renders _fields/time/_widget.gsp:
                  +<f:field property="startDate" widget="time"/>
                  +
                  +// renders _fields/time/_wrapper.gsp and _fields/time/_widget.gsp:
                  +<f:field property="startDate" templates="time"/>
                  +
                  +// renders _fields/\_themes/bs-horizontal/custom/_displayWrapper.gsp:
                  +<f:display property="startDate" wrapper="custom" theme="bs-horizontal"/>
                  +
                  +
                  +// renders _fields/bootstrap3/_displayWrapper.gsp:
                  +<f:display property="startDate" wrapper="bootstrap3"/>
                  +
                  +// renders _fields/time/_displayWidget.gsp:
                  +<f:display property="startDate" widget="time"/>
                  +
                  +// renders _fields/time/_displayWrapper.gsp and _fields/time/_displayWidget.gsp:
                  +<f:display property="startDate" templates="time"/>
                  -
                  -

                  If you need to render a property for display purposes you can use f:display. It will internally use g:fieldValue, g:formatBoolean or g:formatDate to format the value.

                  -
                  -
                  -
                  <f:display bean="person" property="name"/>
                  +
                  +

                  Embedded Properties

                  +
                  -

                  If you need to render the value in a different way you can give f:display a body instead.

                  +

                  Embedded properties are handled in a special way by the f:field and f:all tags. If the property attribute you pass to f:field is an embedded property then the tag recursively renders each individual property of the embedded class with a surrounding fieldset. For example if you have a Person class with a name property and an Address embedded class with street, city and country properties <f:field bean="person" property="address"> will effectively do this:

                  -
                  <f:display bean="person" property="dateOfBirth">
                  -    <g:formatDate format="dd MMM yyyy" date="${value}"/>
                  -</f:display>
                  +
                  <fieldset class="embedded address">
                  +    <legend>Address</legend>
                  +    <f:field bean="person" property="address.street"/>
                  +    <f:field bean="person" property="address.city"/>
                  +    <f:field bean="person" property="address.country"/>
                  +</fieldset>
                  -

                  By default f:display simply renders the property value but if you supply a \_display.gsp template you can render the value in some structured markup, e.g. a table cell or list item. See the Customizing Field Rendering section for how to override templates. For example to render values in a definition list you could use a template like this:

                  -
                  -
                  -
                  -
                  <dt>${label}</dt>
                  -<dd>${value}</dd>
                  -
                  +

                  You can customize how embedded properties are surrounded by providing a layout at grails-app/views/layouts/_fields/embedded.gsp which will override the default layout provided by the plugin.

                  -
                  -

                  Extra attributes (Since version 2.1.4)

                  -

                  You can pass any number of extra attributes to the f:with and f:all tags that will be propagated to the inner fields and displays. -See their individual tags sections for more information.

                  +

                  When you use the f:all tag it will automatically handle embedded properties in this way.

                  -
                  -

                  Breaking changes

                  -
                  -
                  -

                  Templates

                  +
                  +

                  Themes

                  +
                  -

                  The names of the templates were changed for more adequate ones:

                  -
                  -
                  -
                    -
                  • -

                    _field to _wrapper

                    -
                  • -
                  • -

                    _input to _widget

                    -
                  • -
                  • -

                    _display to _displayWrapper

                    -
                  • -
                  • -

                    _displayWidget was added

                    -
                  • -
                  +

                  Since version 2.1.4 It is possible to create themes to provide set of templates for different css frameworks or form layouts. +For example, a bootstrap-fields plugin can provide different themes (eg bs-horizontal, bs-vertical) to support horizontal and vertical form layouts. And another plugin can provide theme for purecss framework.

                  -

                  To use the old names (for backwards compatibility), configure the following in Config.groovy

                  +

                  Themes are put under directory _fields/themes/*themeName*/.

                  -
                  -
                  -
                  grails.plugin.fields.wrapper = "field"
                  -grails.plugin.fields.displayWrapper = "display"
                  -grails.plugin.fields.widget = "input"
                  +
                  +

                  All of the field tags supports theme attribute which accepts the name of the theme. When a theme name is specified, widget, wrapper, and display templates will be searched in theme directory first as described in Customizing Field Rendering.

                  -
                  -

                  Widget attributes

                  +
                  +

                  Including Templates in Plugins

                  +
                  -

                  To pass additional attributes to widgets, prefix them with widget-.

                  +

                  Plugins can include field and/or input level templates to support special UI rendering or non-standard property types. Just include the templates in the plugin’s grails-app/views directory as described in the Customizing Field Rendering section.

                  -
                  -

                  Example:

                  +
                  + + + + + +
                  + + +If you supply templates in a plugin you should consider declaring a <%@page defaultCodec="html" %> directive so that any HTML unsafe property values are escaped properly regardless of the default codec used by client apps. +
                  -
                  -
                  -
                  <f:field property="birthDate" widget-format="dd/MM/yyyy"/>
                  +
                  +

                  In order to be performant, the Fields plugin caches field template lookup results by default. This makes it possible to perform the time-consuming template path resolutions only once during the runtime of the application.

                  +
                  +

                  When template caching is active, only the first page renderings are slow, subsequent ones are fast.

                  -

                  To use the old prefix (for backwards compatibility), configure the following in Config.groovy:

                  +

                  Due to the flexibility needed during template development, this feature can be disabled so it would be possible to recognize newly added field templates without restarting the application. As a result, with bigger webpages, containing a lot of fields, rendering may be fairly slow in development (depending on the number of fields on the page).

                  -
                  -
                  -
                  grails.plugin.fields.widgetPrefix = "input-"
                  +
                  +

                  Performance

                  +
                  +
                  +

                  For template development, the following configuration attribute should be placed in the development environment section of your application’s Config.groovy:

                  -
                  -

                  Changes in tags

                  -
                  -
                    -
                  • -

                    The f:input tag was deprecated because the name was confusing. Use the new f:widget tag instead.

                    -
                  • -
                  • -

                    The f:displayWidget tag was added. It outputs the widget for display purposes, without the wrapper (similar to the widget tag).

                    -
                  • -
                  +
                  +
                  application.groovy
                  +
                  +
                  grails.plugin.fields.disableLookupCache = true
                  -
                  -

                  Localized numbers

                  -

                  All numbers are now rendered localized. This means that when using Locale.ENGLISH the number 1000.50 is represented -as 1,000.50 but with Locale.GERMAN is represented as 1.000,50. To use the old behavior (for backwards compatibility) -without localizing the numbers, configure the following in Config.groovy:

                  +

                  or

                  +
                  application.yml
                  -
                  grails.plugin.fields.localizeNumbers = false
                  +
                  environments:
                  +    development:
                  +        grails:
                  +            plugin:
                  +                fields:
                  +                    disableLookupCache: true
                  +
                  +

                  After the template development has finished, it is recommended to re-enable the template lookup cache in order to have a performant page rendering even during development.

                  -

                  Customizing Field Rendering

                  +

                  Reference

                  -
                  -

                  The plugin resolves the GSP template used for each property according to conventions. You can override the rendering based -on the class and property name or the property type. The f:field tag looks for a template called _wrapper.gsp, the f:widget -tag looks for a template called _widget.gsp, the f:display tag looks for a template called _displayWrapper.gsp.

                  +
                  +

                  Tags

                  +
                  +

                  all

                  +
                  -
                  - - - - - -
                  - - -Breaking changes in version 1.5 -
                  +
                  +

                  f:all

                  +
                  +
                  Purpose
                  +
                  +

                  Renders fields for all properties of an object by using f:field for each property.

                  -

                  In version 1.5 a new template was introduced _displayWidget.gsp. This is the corollary of _widget.gsp for fields that -are read-only, i.e. it is responsible for rendering just the markup for the field itself. Furthermore, the default names -of all the templates were changed in this version, in the interest of clarity and consistency. The changes to the template -names are summarized below:

                  +

                  The id, version, dateCreated and lastUpdated properties are skipped on domain classes. Additionally any property with a display: false constraint set will be skipped.

                  +
                  +
                  +
                  Attributes
                  - +--+++ - - + + + - - + + + - - + + + + - + + + + + + + + + + +
                  Table 1. Template Name ChangesTable 5. Attributes for f:all
                  Old Template Name (before v.1.5)New Template Name (v.1.5 onwards)NameRequiredDescription

                  _field.gsp

                  _wrapper.gsp

                  bean

                  if not inside f:with

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  _display.gsp

                  _displayWrapper.gsp

                  except

                  N/A

                  A comma-separated list of properties that should be skipped (in addition to the defaults).

                  order

                  N/A

                  _displayWidget.gsp

                  A comma-separated list of properties which represents the order in which the tag should generate fields.

                  prefix

                  String

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  theme

                  String

                  Theme to use if available.

                  +
                  +
                  +
                  Extra attributes (Since version 2.1.4)
                  -

                  Users upgrading to 1.5 from a previous version should either rename their templates (recommended) or add the following -to grails-app/conf/application.yml to change the default templates names to the old names

                  +

                  You can pass extra attributes to the all tag that will be propagated to the inner fields.

                  +
                  +
                  +
                  Example
                  -
                  grails:
                  -    plugin:
                  -        fields:
                  -            wrapper: field
                  -            displayWrapper: display
                  -            widget: input
                  -            displayWidget: displayWidget
                  +
                  <f:all bean="person" wrapper="someWrapper"/>
                  -
                  -

                  Locating Field Templates by Convention

                  -

                  The template for a field is chosen by a convention using the names of the controller, action, bean class, bean property, theme, etc. All the tags will look for templates in the following directories in decreasing order of preference:

                  +

                  In that way all the fields are going to be executed as if they were executed with the extra attribute on them.

                  +
                  +
                  + + + + + +
                  + + +Remember that if you want to use some of those attributes in the widget templates you need to prefix them with the widget- word (unless you have configured another prefix) +
                  +
                  +
                  +
                  +
                  +

                  display

                  + +
                  +
                  +

                  f:display

                  +
                  +
                  Purpose
                  +
                  +

                  f:display renders a property for display. If there is no _displayWrapper template in scope the tag will simply render the property value.

                  +
                  +
                  +

                  f:display template will look for a _displayWrapper for the wrapper itself and a _displayWidget for the widget used inside the wrapper template.

                  +
                  +
                  +

                  If the f:display tag has a body its output is used as the value passed as the value model to the _display template. If there is no body then the raw property value is passed to g:fieldValue, g:formatDate or g:formatBoolean depending on its type and the result is passed as the value model to the _display template.

                  +
                  +
                  + + + + + +
                  + + +In version 1.5 new attributes were added: +Since then you can specify the folders where the templates are located. You can do this for the wrapper folder, the widget folder ot both (if they are located on the same folder). +
                  +
                  +
                  +
                  +
                  Examples
                  +
                  +
                  +
                  <f:display bean="person"/>
                  +
                  +<f:display bean="person" displayStyle="table"/>
                  +
                  +<f:display bean="person" property="name"/>
                  +
                  +// renders widget and wrapper from subdirectory of _fields/_themes/purecss if defined
                  +<f:display bean="person" property="name" theme="purecss"/>
                  +
                  +// renders _fields/bootstrap3/_displayWrapper.gsp:
                  +<f:display bean="person" property="name" wrapper="bootstrap3"/>
                  +
                  +// renders _fields/maskedInput/_displayWidget.gsp:
                  +<f:display bean="person" property="name" widget="maskedInput"/>
                  +
                  +// renders _fields/maskedInput/_displayWrapper.gsp and _fields/maskedInput/_displayWidget.gsp:
                  +<f:display bean="person" property="name" templates="maskedInput"/>
                  +
                  +<f:display bean="person" property="dateOfBirth">
                  +    <g:formatDate format="dd MMM yyyy" date="${value}"/>
                  +</f:display>
                  -
                  -
                    -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/_themes/*themeName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/_themes/*themeName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/*propertyName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/_themes/*themeName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*propertyName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/_themes/*themeName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/_themes/*themeName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/*class*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/*superclass*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/*associationType*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/*propertySuperclass*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/_themes/*themeName*/default/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*actionName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerNamespace*/*controllerName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/*class*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/*superclass*/*propertyName*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/*associationType*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/*propertyType*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/*propertySuperclass*/

                    -
                  • -
                  • -

                    grails-app/views/_fields/default/

                    -
                  • -
                  -
                  -

                  The variables referenced in these paths are:

                  +
                  +
                  Attributes
                  - +--+++ + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + - - + + + + + + + + + + + + + + + + + +
                  Table 2. Referenced VariablesTable 6. Attributes for f:display
                  NameRequired Description

                  controllerName

                  The name of the current controller (if any).

                  bean

                  if not inside f:with

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  actionName

                  The name of the current action (if any).

                  property

                  No

                  The path to the property. This can include any level of nesting and numeric or string indexes. For example employees[0].address[home].street is a valid path. If absent, all properties will be displayed via the grails-app/views/templates/_fields/_list.gsp (see the template code below).

                  themeName

                  Theme name specified as value of theme attribute (Optional).

                  value

                  No

                  Overrides the actual value of the property.

                  class

                  The bean class. For simple properties this is the class of the object passed to the bean attribute of the f:field or f:widget tag but when the property attribute was nested this is the class at the end of the chain. For example, if the property path was employees[0].address.street this will be the class of address.

                  default

                  No

                  A default value for the property that will be used if the actual property value is false.

                  superclass

                  Any superclass or interface of class excluding Object, GroovyObject, Serializable, Comparable and Cloneable and those from GORM.

                  label

                  No

                  Overrides the field label passed to the template. This value may either be an i18n key or a literal string.

                  propertyName

                  The property name at the end of the chain passed to the property attribute of the f:field or f:widget tag. For example, if the property path was employees[0].address.street then this will be street.

                  displayStyle

                  No

                  When specified and different from the string default, this tag will try to use a _display-${displayStyle} template with a _display template as fallback. `displayStyle="table" will render embedded components by default with toString() instead of rendering all nested properties.

                  propertyType

                  The type of the property at the end of the chain passed to the property attribute of the f:field or f:widget tag. For example, for a java.lang.String property this would be string.

                  except

                  No

                  A comma-separated list of properties that should be skipped.

                  propertySuperclass

                  Any superclass or interface of propertyType excluding Object, GroovyObject, Serializable, Comparable and Cloneable.

                  order

                  No

                  A comma-separated list of properties which represents the order in which the tag should display them.

                  associationType

                  One of 'oneToOne', 'oneToMany', 'manyToMany' or 'manyToOne'. Only relevant if the property is a domain class association.

                  theme

                  No

                  Theme to use if available. The theme can define a new directory structure in /_fields/_themes/<themename> which will take priority over templates, wrapper and widget if they are specified, as it is injecting the search path first in the list.

                  templates

                  No

                  Specify the folder inside _fields where to look up for the wrapper and widget template.

                  widget

                  No

                  Specify the folder inside _fields where to look up for the widget template.

                  wrapper

                  No

                  Specify the folder inside _fields where to look up for the wrapper template.

                  -

                  All class names are camel-cased simple forms. For example java.lang.String becomes string, and com.project.HomeAddress becomes homeAddress.

                  -
                  -
                  -

                  Templates are resolved in this order so that you can override in the more specific circumstance and fall back to successively more general defaults. For example, you can define a field template for all java.lang.String properties but override a specific property of a particular class to use more specialized rendering.

                  -
                  -
                  -

                  Templates in plugins are resolved as well. This means plugins such as Joda Time can provide default rendering for special property types. A template in your application will take precedence over a template in a plugin at the same level. For example if a plugin provides a grails-app/views/_fields/string/_widget.gsp the same template in your application will override it but if the plugin provides grails-app/views/_fields/person/name/_widget.gsp it would be used in preference to the more general template in your application.

                  -
                  -
                  -

                  For most properties the out-of-the-box defaults should provide a good starting point.

                  +

                  Any additional attributes are passed to the rendered template.

                  -
                  -

                  Locating Templates Conventionally Example

                  -
                  -

                  Imagine an object of class Employee that extends the class Person and has a String name property.

                  +
                  +

                  Special case for rendering all properties of a bean

                  -

                  You can override the template f:field uses with any of these:

                  -
                  -
                  -
                    -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/string/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/name/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/string/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/employee/name/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/person/name/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/string/_wrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/default/_wrapper.gsp

                    -
                  • -
                  +

                  When f:display is used without a property then all bean properties are rendered. This is done with the grails-app/views/templates/_fields/_list.gsp template. The default template can be found on GitHub

                  -
                  -

                  override the template f:widget uses with any of these:

                  -
                  -
                    -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/string/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/name/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/string/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/employee/name/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/person/name/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/string/_widget.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/default/_widget.gsp

                    -
                  • -
                  +
                  +

                  displayWidget

                  +
                  +
                  +

                  f:displayWidget

                  +
                  +
                  Purpose
                  -

                  And override the template f:display uses with any of these:

                  +

                  f:displayWidget renders an appropriate widget for a display property, for example an <span>${value}</span> element for a String property.

                  -
                  -
                    -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_themes/*themeName*/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/name/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/string/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/*actionName*/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/name/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/string/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/*controllerName*/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/employee/name/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/person/name/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/string/_displayWrapper.gsp

                    -
                  • -
                  • -

                    grails-app/views/_fields/default/_displayWrapper.gsp

                    -
                  • -
                  +
                  + + + + + +
                  + + +Using f:displayWidget directly will only be necessary for very specialized cases, usually it will be invoked via f:display. +
                  +
                  +
                  +
                  Attributes
                  -

                  During template development it is usually recommended to disable template caching in order to allow the plugin to recognize new/renamed/moved templates without restarting the application. See the "Performance" section of the guide for the exact settings.

                  +

                  f:displayWidget accepts exactly the same attributes as the f:display tag (except for wrapper and templates attributes).

                  -
                  -

                  See Template Seach Path

                  +
                  +
                  Example of a _displayWidget.gsp
                  -

                  The plugin logs which locations it is checking for templates as debug log. You can enable this by defining a logger in logback.groovy

                  +

                  If you have a domain class with a java.time.LocalDate you might want to format it specially:

                  -
                  +
                  +
                  grails-app/views/_fields/localDate/_displayWidget.gsp
                  -
                  logger('grails.plugin.formfields.FormFieldsTemplateService', DEBUG,['STDOUT'])
                  +
                  <%@ page import="java.time.format.DateTimeFormatter" %>
                  +<g:set var="localDatePattern" value="${message(code: 'default.localDate.format',default: 'yyyy-MM-dd')}"/>
                  +${value?.format(DateTimeFormatter.ofPattern(localDatePattern, request.getLocale()))}
                  +
                  +
                  +
                  +

                  field

                  + +
                  +
                  +

                  f:field

                  +
                  +
                  Description
                  +
                  +

                  f:field renders the widget using either f:widget or the tag body accompanied by any surrounding markup, typically a container, a label tag and any validation messages.

                  +
                  -

                  The can disable the caching in application.yml using:

                  +

                  By default the f:field tag will output:

                  -
                  grails:
                  -    plugin:
                  -        fields:
                  -            disableLookupCache: true
                  +
                  <div class="fieldcontain">
                  +    <label for="foo">Foo</label>
                  +    <!-- the widget as generated by f:widget or the tag body -->
                  +</div>
                  +
                  +

                  The intention is that f:field should typically be used without a tag body. For example:

                  +
                  +
                  +
                  +
                  <f:field bean="person" property="name"/>
                  +
                  -
                  -

                  Default Behaviour - Using Grails Widget Tags

                  -

                  If no template override is found the plugin will use the standard grails input tags (e.g. g:select, g:checkbox, g:field) for rendering input controls. -Using f:field you can pass extra arguments (e.g. optionKey, optionValue) through to these tags by prefixing them with widget-, e.g.

                  +

                  In which case the tag will use f:widget to generate an appropriate input. Alternatively in more specialized cases you can give f:field a tag body. For example:

                  -
                  <f:field bean="person" property="gender" widget-optionValue="name"/>
                  +
                  <f:field bean="person" property="name">
                  +    <g:textField name="${property}" value="${value}"/>
                  +</f:field>
                  +
                  +
                  +
                  +

                  Since version 1.5 you can specify which specific templates are going to be used on the view. +You can accomplish this using new attributes: wrapper, widget and templates. (See attributes section)

                  +
                  +

                  Since version 2.1.4 you can specify the theme to be used.

                  +
                  +
                  +
                  +
                  <f:field bean="person" property="name" theme="bs-horizontal"/>
                  +
                  +
                  +
                  +
                  +
                  // renders _fields/bootstrap3/_wrapper.gsp:
                  +<f:field bean="person" property="name" wrapper="bootstrap3"/>
                  +
                  +// renders _fields/maskedInput/_widget.gsp:
                  +<f:field bean="person" property="name" widget="maskedInput"/>
                  +
                  +// renders _fields/maskedInput/_wrapper.gsp and _fields/maskedInput/_widget.gsp:
                  +<f:field bean="person" property="name" templates="maskedInput"/>
                  -
                  -

                  Template parameters

                  -

                  The f:field and f:widget tags will pass the following parameters to your templates or to the body of f:field if you use one:

                  +

                  See Customizing Field Rendering for details of the parameters passed to the tag body.

                  +
                  +
                  +

                  The f:field tag handles embedded domain properties in a special way. See Embedded Properties for details.

                  +
                  +
                  +
                  Attributes
                  - +---+++ - + - - - - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - -
                  Table 3. Template ParametersTable 7. Attributes for f:field
                  NameTypeRequired Description

                  bean

                  Object

                  The bean attribute as passed to the f:field or f:widget tag.

                  property

                  String

                  The property attribute as passed to the f:field or f:widget tag. This would generally be useful for the name attribute of a form input.

                  bean

                  yes for f:widget if not inside f:with, optional for f:field

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  type

                  Class

                  The property type.

                  property

                  yes

                  The path to the property. This can include any level of nesting and numeric or string indexes. For example employees[0].address[home].street is a valid path. If absent, all properties will be displayed.

                  label

                  String

                  The field label text. This is based on the label attribute passed to the f:field or f:widget tag. If no label attribute was used the label is resolved by convention - see below.

                  value

                  No

                  Overrides the actual value of the property.

                  value

                  Object

                  the property value. This can also be overridden or defaulted if the value or default attribute was passed to f:field or f:widget.

                  default

                  No

                  A default value for the property that will be used if the actual property value is false.

                  constraints

                  ConstrainedProperty

                  The constraints for the property if the bean is a domain or command object.

                  required

                  No

                  Overrides the required status of the property. By default this is worked out based on the property’s constraints.

                  persistentProperty

                  DomainProperty

                  The persistent property object if the bean is a domain object.

                  invalid

                  No

                  Overrides the validity of the property. By default this is worked out using the bean’s errors property for domain and command objects.

                  errors

                  List<String>

                  The error messages for any field errors present on the property. If there are no errors this will be an empty List.

                  label

                  No

                  Overrides the field label passed to the template. This value may either be an i18n key or a literal string.

                  required

                  boolean

                  true if the field is required, i.e. has a nullable: false or blank: false constraint.

                  prefix

                  No

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  invalid

                  boolean

                  true if the property has any field errors.

                  wrapper

                  No

                  Specifies the name of the folder inside _fields where the _wrapper.gsp template is located.

                  prefix

                  String

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  widget

                  No

                  Specifies the name of the folder inside \_fields where the \_widget.gsp template is located.

                  -
                  -

                  In addition f:field passes the following parameters:

                  -
                  - - ----- - - - - + + + - + - +
                  Table 4. Parameter Names from f:field

                  Name

                  Type

                  Description

                  templates

                  No

                  Specifies the name of the folder inside _fields where the _wrapper.gsp and _widget.gsp templates are located. It is a shorthand for specifying both (wrapper and widget).

                  widget

                  theme

                  String

                  The output of f:widget for the current bean and property if f:field was used without a tag body, otherwise the output of the tag body.

                  Theme to use if available.

                  -
                  - - - - - -
                  - - -If the bean attribute was not supplied to f:field then bean, type, value and persistentProperty will all be null. -
                  -
                  -
                  -
                  -

                  Field labels

                  -

                  If the label attribute is not supplied to the f:field tag then the label string passed to the field template is resolved by convention. The plugin uses the following order of preference for the label:

                  -
                  -
                  -
                    -
                  • -

                    An i18n message using the key beanClass.path`.label`. For example when using <f:field bean="personInstance" property="address.city"/> the plugin will try the i18n key person.address.city.label. If the property path contains any index it is removed so <f:field bean="authorInstance" property="books<<0>>.title"/> would use the key author.books.title.label.

                    -
                  • -
                  • -

                    An i18n message using the key objectType.propertyName`.label`. For example when using <f:field bean="personInstance" property="address.city"/> the plugin will try the i18n key address.city.label.

                    -
                  • -
                  • -

                    The natural property name. For example when using <f:field bean="personInstance" property="dateOfBirth"/> the plugin will use the label "Date Of Birth".

                    -
                  • -
                  +

                  Any additional attributes are passed to the rendered template. Any additional attributes prefixed with widget- are instead passed to the widget template or rendered on the default input.

                  -
                  -

                  Locating Field Templates Directly

                  +
                  +
                  Example of overriding a _wrapper.gsp
                  -

                  Rather than relying on the convention described previously to locate the template(s) to be used for a particular field, it is -instead possible to directly specify the directory containing the templates. This feature was introduced in version 1.5.

                  -
                  -
                  -
                    -
                  • -

                    The wrapper attribute can be used with the f:field or f:display tags to specify the directory containing the _wrapper.gsp or _displayWrapper.gsp template to be used

                    -
                  • -
                  • -

                    The widget attribute can be used with the f:field or f:display tags to specify the directory containing the _widget.gsp or _displayWidget.gsp template to be used

                    -
                  • -
                  • -

                    If the wrapper and widget templates both have the same value, the templates attribute can be used instead as a shorthand. For example:

                    -
                  • -
                  +

                  If you want to override a f:wrapper to be used for all widgets then create a file with content like this:

                  +
                  grails-app/views/_fields/default/_wrapper.gsp
                  -
                  <f:field property="startDate" templates="bootstrap3" />
                  -
                  +
                  <div class="form-group ${invalid ? 'has-error' : ''}">
                  +    <label for="${property}">${label} ${required ? '*' : ''}</label>
                  +
                  +    <div>
                  +        <f:widget property="${property}"/>
                  +        <g:if test="${errors}">
                  +            <g:each in="${errors}" var="error">
                  +                <span class="help-block"><g:message error="${error}"/></span>
                  +            </g:each>
                  +        </g:if>
                  +    </div>
                  +</div>
                  +
                  -
                  -

                  is equivalent to:

                  -
                  -
                  -
                  <f:field property="startDate" wrapper="bootstrap3" widget="bootstrap3" />
                  +
                  +

                  input

                  +
                  +
                  +

                  f:input (DEPRECATED)

                  +
                  +
                  Deprecated since version 1.5
                  -

                  if theme is specified, theme will be searched first to find the templates -For example

                  +

                  Use f:widget tag instead

                  -
                  -
                  -
                  <f:field property="startDate" templates="custom" theme="bs-horizontal"/>
                  -
                  -

                  Will search the templates first in \_fields/_themes/bs-horizontal/custom and then \_fields/custom

                  +
                  +

                  table

                  +
                  +
                  +

                  f:table

                  +
                  +
                  Purpose
                  -

                  If a direct location is specified, and the templates cannot be found therein, the plugin will fall back to locating templates -by convention.

                  +

                  <f:table/> renders some or all properties of a collection of beans in a table using the f:display widget for each property type. If there is no \_display template in scope the tag will simply render the property values.

                  -
                  -

                  Locating Templates Directly Example

                  +
                  +
                  Examples
                  -
                  // renders _fields/\_themes/bs-horizontal/custom/_wrapper.gsp:
                  -<f:field property="startDate" wrapper="custom" theme="bs-horizontal"/>
                  -
                  -// renders _fields/bootstrap3/_wrapper.gsp:
                  -<f:field property="startDate" wrapper="bootstrap3"/>
                  -
                  -// renders _fields/time/_widget.gsp:
                  -<f:field property="startDate" widget="time"/>
                  +
                  <f:table collection="personList"/>
                   
                  -// renders _fields/time/_wrapper.gsp and _fields/time/_widget.gsp:
                  -<f:field property="startDate" templates="time"/>
                  +<f:table collection="personList" properties="firstName, lastName"/>
                   
                  -// renders _fields/\_themes/bs-horizontal/custom/_displayWrapper.gsp:
                  -<f:display property="startDate" wrapper="custom" theme="bs-horizontal"/>
                  +<f:table collection="personList" properties="['firstName', 'lastName']"/>
                   
                  +<f:table collection="catsAndDogsList" domainClass="org.zoo.Animal"/>
                   
                  -// renders _fields/bootstrap3/_displayWrapper.gsp:
                  -<f:display property="startDate" wrapper="bootstrap3"/>
                  +<f:table collection="catsAndDogsList" domainClass="org.zoo.Animal" theme="bs-horizontal"/>
                   
                  -// renders _fields/time/_displayWidget.gsp:
                  -<f:display property="startDate" widget="time"/>
                  +// List first three properties in Person
                  +<f:table collection="personList" maxProperties="3"/>
                   
                  -// renders _fields/time/_displayWrapper.gsp and _fields/time/_displayWidget.gsp:
                  -<f:display property="startDate" templates="time"/>
                  -
                  -
                  -
                  +// Include id, lastUpdated, dateCreated +<f:table collection="personList" except="[]]"/>
                  -
                  -

                  Embedded Properties

                  -
                  -

                  Embedded properties are handled in a special way by the f:field and f:all tags. If the property attribute you pass to f:field is an embedded property then the tag recursively renders each individual property of the embedded class with a surrounding fieldset. For example if you have a Person class with a name property and an Address embedded class with street, city and country properties <f:field bean="person" property="address"> will effectively do this:

                  +

                  The template for <f:table/> should be in

                  -
                  <fieldset class="embedded address">
                  -    <legend>Address</legend>
                  -    <f:field bean="person" property="address.street"/>
                  -    <f:field bean="person" property="address.city"/>
                  -    <f:field bean="person" property="address.country"/>
                  -</fieldset>
                  -
                  +
                  grails-app/views/templates/_fields/_table.gsp
                  -
                  -

                  You can customize how embedded properties are surrounded by providing a layout at grails-app/views/layouts/_fields/embedded.gsp which will override the default layout provided by the plugin.

                  -

                  When you use the f:all tag it will automatically handle embedded properties in this way.

                  -
                  -
                  +

                  but you can have multiple table templated, if you specify the template property. +All templates should still be located in view/templates/_fields/, the example below uses 4 different templates for table.

                  -
                  -

                  Themes

                  -
                  -
                  -

                  Since version 2.1.4 It is possible to create themes to provide set of templates for different css frameworks or form layouts. -For example, a bootstrap-fields plugin can provide different themes (eg bs-horizontal, bs-vertical) to support horizontal and vertical form layouts. And another plugin can provide theme for purecss framework.

                  +
                  +
                  +
                  <f:table collection="myList" myProperty="Template: view/templates/_fields/_table.gsp" />
                  +<f:table collection="${demoList}" template="table3" myProperty="Template: view/templates/_fields/_table3.gsp" />
                  +<f:table collection="${demoList}" template="tables/table2" myProperty="Template: in view/templates/_fields/tables/_table2.gsp" />
                  +<f:table collection="${demoList}" template="tables/table" myProperty="Template: view/templates/_fields/tables/_table.gsp" />
                  -
                  -

                  Themes are put under directory _fields/themes/*themeName*/.

                  -

                  All of the field tags supports theme attribute which accepts the name of the theme. When a theme name is specified, widget, wrapper, and display templates will be searched in theme directory first as described in Customizing Field Rendering.

                  -
                  -
                  +

                  When theme is specified, the \_display template will be searched first in theme, but the theme property does not directly apply to table.

                  -
                  -

                  Including Templates in Plugins

                  -
                  -
                  -

                  Plugins can include field and/or input level templates to support special UI rendering or non-standard property types. Just include the templates in the plugin’s grails-app/views directory as described in the Customizing Field Rendering section.

                  -
                  - +
                  +
                  Attributes
                  +
                  ++++++ + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  - - -If you supply templates in a plugin you should consider declaring a <%@page defaultCodec="html" %> directive so that any HTML unsafe property values are escaped properly regardless of the default codec used by client apps. -NameRequired?DefaultDescription

                  collection

                  yes

                  The collection of beans to be displayed

                  domainClass

                  Class of first element in collection

                  The FQN of the domain class of the elements in the collection.

                  properties

                  First 7 (or less)

                  Comma-separated String or List of properties to be shown (table columns). Defaults to the first 7 (or less) properties of the domain class ordered by the domain class' constraints, unless maxProperties is set below

                  displayStyle

                  Determines the display template used for the bean’s properties. Defaults to table meaning that \_display-table templates will be used when available.

                  except

                  ['id', 'lastUpdated', 'dateCreated']

                  A comma-separated String or List of properties that should be skipped. Use the empty list to include id, lastUpdated and dateCreated

                  order

                  Comma-separated String or List of properties which represents the order in which the tag should display them.

                  theme

                  String

                  Theme to use if available.

                  maxProperties

                  Number

                  7

                  The maximum number of properties to display when rendering the table. If zero is specified all columns are shown, otherwise properties[0..<maxProperties] are shown. maxProperties can be negative.

                  template

                  String

                  table

                  Alternative template for table rendering. Templates should be in the grails-app/views/templates/_fields/ folder.

                  -
                  -
                  -

                  In order to be performant, the Fields plugin caches field template lookup results by default. This makes it possible to perform the time-consuming template path resolutions only once during the runtime of the application.

                  -
                  -
                  -

                  When template caching is active, only the first page renderings are slow, subsequent ones are fast.

                  -
                  -
                  -

                  Due to the flexibility needed during template development, this feature can be disabled so it would be possible to recognize newly added field templates without restarting the application. As a result, with bigger webpages, containing a lot of fields, rendering may be fairly slow in development (depending on the number of fields on the page).

                  -
                  -
                  -
                  -
                  -

                  Performance

                  -
                  -
                  -

                  For template development, the following configuration attribute should be placed in the development environment section of your application’s Config.groovy:

                  -
                  -
                  -
                  application.groovy
                  +
                  -
                  grails.plugin.fields.disableLookupCache = true
                  -
                  -
                  -
                  -

                  or

                  +
                  Any additional attributes are passed to the rendered template.
                  -
                  -
                  application.yml
                  -
                  -
                  environments:
                  -    development:
                  -        grails:
                  -            plugin:
                  -                fields:
                  -                    disableLookupCache: true
                  +
                  +
                  Modifying the _table.gsp template.
                  -

                  After the template development has finished, it is recommended to re-enable the template lookup cache in order to have a performant page rendering even during development.

                  -
                  -
                  -
                  -
                  -

                  Reference

                  -
                  -
                  -

                  Tags

                  -
                  -

                  all

                  - +

                  To make you own version of a f:table template, the file should be located in grails-app/views/templates/_fields/_table.gsp +unless a different location is specified with the template property. +You can find a starting point for a new file on GitHub

                  -
                  -

                  f:all

                  -
                  -
                  Purpose
                  +
                  +
                  Model in the template
                  -

                  Renders fields for all properties of an object by using f:field for each property.

                  +

                  The following model is passed to the _table.gsp template:

                  + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  NameContent

                  domainClass

                  The type of the persistent instance. Either type of the first row in the collection or the domainClass passed as argument to f:table

                  columnProperties

                  Contains a list of Map describing each table column. See table below for the map content

                  domainProperties

                  deprecated: see columnProperties

                  collection

                  Rows with data

                  displayStyle

                  The attribute displayStyle passed to the model unmodified

                  theme

                  The attribute theme passed to the model unmodified

                  -

                  The id, version, dateCreated and lastUpdated properties are skipped on domain classes. Additionally any property with a display: false constraint set will be skipped.

                  -
                  +

                  The column model:

                  -
                  -
                  Attributes
                  ----++ - - + - - - + + - - - + + - - - + + - - - + + - - - + + + + + + + + + + + + + +
                  Table 5. Attributes for f:all
                  NameRequiredDescriptionContent

                  bean

                  if not inside f:with

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  bean

                  Empty instance of a domainClass bean

                  except

                  N/A

                  A comma-separated list of properties that should be skipped (in addition to the defaults).

                  property

                  The property name

                  order

                  N/A

                  A comma-separated list of properties which represents the order in which the tag should generate fields.

                  name

                  Deprecated, see property

                  prefix

                  String

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  type

                  The property type

                  theme

                  String

                  Theme to use if available.

                  defaultLabel

                  Translated label (deprecated)

                  label

                  Translated label

                  constraints

                  If the property has constraints

                  required

                  Is the property required

                  -
                  -
                  -
                  Extra attributes (Since version 2.1.4)
                  -

                  You can pass extra attributes to the all tag that will be propagated to the inner fields.

                  +

                  (This is a simplified version of a wrapper model)

                  +
                  -
                  -
                  Example
                  -
                  -
                  -
                  <f:all bean="person" wrapper="someWrapper"/>
                  +
                  +

                  widget

                  +
                  +
                  +

                  f:widget

                  +
                  +
                  Purpose
                  -

                  In that way all the fields are going to be executed as if they were executed with the extra attribute on them.

                  +

                  f:widget renders an appropriate widget for a property, for example an <input type="text"> element for a String property or a <select> for an enum.

                  @@ -1891,930 +2307,649 @@
                  Example
                  -Remember that if you want to use some of those attributes in the widget templates you need to prefix them with the widget- word (unless you have configured another prefix) +Using f:widget directly will only be necessary for very specialized cases, usually it will be invoked via f:field.
                  +
                  +
                  Attributes
                  +
                  +

                  f:widget accepts exactly the same attributes as the f:field tag (except for wrapper and templates attributes).

                  -
                  -

                  display

                  -
                  -
                  -

                  f:display

                  -
                  Purpose
                  +
                  Default rendering
                  -

                  f:display renders a property for display. If there is no _displayWrapper template in scope the tag will simply render the property value.

                  +

                  The <f:widget/> tag will will by default use sensible defaults when rendering String, Number, Boolean, URL, Enum, Date and associations like oneToOne, oneToMany, manyToOne and manyToMany.

                  -

                  f:display template will look for a _displayWrapper for the wrapper itself and a _displayWidget for the widget used inside the wrapper template.

                  +

                  In a few cases it is possible to control which default widget to use, by specifying it in the beans constraints.

                  -

                  If the f:display tag has a body its output is used as the value passed as the value model to the _display template. If there is no body then the raw property value is passed to g:fieldValue, g:formatDate or g:formatBoolean depending on its type and the result is passed as the value model to the _display template.

                  -
                  -
                  - - - - - -
                  - - -In version 1.5 new attributes were added: -Since then you can specify the folders where the templates are located. You can do this for the wrapper folder, the widget folder ot both (if they are located on the same folder). -
                  -
                  -
                  -
                  -
                  Examples
                  -
                  -
                  -
                  <f:display bean="person"/>
                  -
                  -<f:display bean="person" displayStyle="table"/>
                  -
                  -<f:display bean="person" property="name"/>
                  -
                  -// renders widget and wrapper from subdirectory of _fields/_themes/purecss if defined
                  -<f:display bean="person" property="name" theme="purecss"/>
                  -
                  -// renders _fields/bootstrap3/_displayWrapper.gsp:
                  -<f:display bean="person" property="name" wrapper="bootstrap3"/>
                  -
                  -// renders _fields/maskedInput/_displayWidget.gsp:
                  -<f:display bean="person" property="name" widget="maskedInput"/>
                  -
                  -// renders _fields/maskedInput/_displayWrapper.gsp and _fields/maskedInput/_displayWidget.gsp:
                  -<f:display bean="person" property="name" templates="maskedInput"/>
                  -
                  -<f:display bean="person" property="dateOfBirth">
                  -    <g:formatDate format="dd MMM yyyy" date="${value}"/>
                  -</f:display>
                  -
                  +

                  The following happens with these types:

                  +
                  +
                  String
                  +
                  +

                  By default, properties instance of String renders a <g:field type="text"> type field, but the constraints in the bean will alter this in these cases:

                  -
                  -
                  Attributes
                  ----++ - - - - - - - - - - - - - - - - - - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + + +
                  Table 6. Attributes for f:display
                  NameRequiredDescription

                  bean

                  if not inside f:with

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  property

                  No

                  The path to the property. This can include any level of nesting and numeric or string indexes. For example employees[0].address[home].street is a valid path. If absent, all properties will be displayed via the grails-app/views/templates/_fields/_list.gsp (see the template code below).

                  value

                  No

                  Overrides the actual value of the property.

                  constraint

                  Rendered Widget type

                  default

                  No

                  A default value for the property that will be used if the actual property value is false.

                  inList

                  <g:select/>. If the field is not required, a noSelection is added to the select

                  label

                  No

                  Overrides the field label passed to the template. This value may either be an i18n key or a literal string.

                  password: true

                  <g:field type="password"/>

                  displayStyle

                  No

                  When specified and different from the string default, this tag will try to use a _display-${displayStyle} template with a _display template as fallback. `displayStyle="table" will render embedded components by default with toString() instead of rendering all nested properties.

                  email: true

                  <g:field type="email"/>

                  except

                  No

                  A comma-separated list of properties that should be skipped.

                  url: true

                  <g:field type="url"/>

                  order

                  No

                  A comma-separated list of properties which represents the order in which the tag should display them.

                  widget: 'textarea'

                  <g:textArea/>

                  +
                  +
                  +
                  Numeric and primitive types
                  +
                  +

                  By default, properties instance of Number renders a <g:field type="number"> or <:field type="number decimal"/> type field, but the constraints in the bean will alter this in these cases:

                  +
                  + ++++ + - - - + + - - - + + - - - + + - - - + +

                  theme

                  No

                  Theme to use if available. The theme can define a new directory structure in /_fields/_themes/<themename> which will take priority over templates, wrapper and widget if they are specified, as it is injecting the search path first in the list.

                  constraint

                  Affects the rendered widget

                  templates

                  No

                  Specify the folder inside _fields where to look up for the wrapper and widget template.

                  scale

                  Sets the step attribute on the input field

                  widget

                  No

                  Specify the folder inside _fields where to look up for the widget template.

                  min

                  Set the min attribute on the input field

                  wrapper

                  No

                  Specify the folder inside _fields where to look up for the wrapper template.

                  max

                  Set the max attribute on the input field

                  -

                  Any additional attributes are passed to the rendered template.

                  +

                  By default, the value is formatted with the default numberFormatter based on the request locale.

                  +
                  +

                  This behavior can be turned off in the configuration by setting:

                  +
                  +
                  +
                  grails:
                  +    plugin:
                  +        fields:
                  +            localizeNumbers: false
                  -
                  -

                  Special case for rendering all properties of a bean

                  -
                  -

                  When f:display is used without a property then all bean properties are rendered. This is done with the grails-app/views/templates/_fields/_list.gsp template. The default template can be found on GitHub

                  -
                  -

                  displayWidget

                  -
                  -
                  -

                  f:displayWidget

                  -
                  Purpose
                  +
                  Boolean
                  -

                  f:displayWidget renders an appropriate widget for a display property, for example an <span>${value}</span> element for a String property.

                  -
                  -
                  - - - - - -
                  - - -Using f:displayWidget directly will only be necessary for very specialized cases, usually it will be invoked via f:display. -
                  +

                  Renders a <g:checkBox/>

                  -
                  Attributes
                  +
                  URL
                  -

                  f:displayWidget accepts exactly the same attributes as the f:display tag (except for wrapper and templates attributes).

                  +

                  Renders a <g:field type="url"/>

                  -
                  Example of a _displayWidget.gsp
                  +
                  Enum
                  -

                  If you have a domain class with a java.time.LocalDate you might want to format it specially:

                  +

                  enum types always renders a <g:select/> with all the values in the type. To render a subset of enum values, the inList constraint can be used.

                  -
                  -
                  grails-app/views/_fields/localDate/_displayWidget.gsp
                  -
                  -
                  <%@ page import="java.time.format.DateTimeFormatter" %>
                  -<g:set var="localDatePattern" value="${message(code: 'default.localDate.format',default: 'yyyy-MM-dd')}"/>
                  -${value?.format(DateTimeFormatter.ofPattern(localDatePattern, request.getLocale()))}
                  +
                  +
                  Date, Calendar, java.sql.Date and java.sql.Time
                  +
                  +

                  Renders a <g:datePicker/>. If Date, Calendar, or java.sql.Date then precision is set to day, if java.sql.Time then minute

                  +
                  +
                  byte[], Byte[], Blob
                  +
                  +

                  Renders a <g:field type="file"/>

                  -
                  -

                  field

                  -
                  -
                  -

                  f:field

                  -
                  Description
                  +
                  oneToOne, manyToOne or manyToMany associations
                  -

                  f:field renders the widget using either f:widget or the tag body accompanied by any surrounding markup, typically a container, a label tag and any validation messages.

                  +

                  All these associations renders a <g:select/> and if association has a nullable: true constraint, then a noSelection attribute is added.

                  -

                  By default the f:field tag will output:

                  +

                  For the manyToMany association, the multiple attribute is set.

                  -
                  -
                  -
                  <div class="fieldcontain">
                  -    <label for="foo">Foo</label>
                  -    <!-- the widget as generated by f:widget or the tag body -->
                  -</div>
                  +
                  +

                  oneToOne and `manyToOne renders a

                  +
                  +
                  oneToMany association
                  -

                  The intention is that f:field should typically be used without a tag body. For example:

                  -
                  -
                  -
                  -
                  <f:field bean="person" property="name"/>
                  +

                  The oneToMany association does not render an input type field, but does instead render a list of links to the associated objects.

                  +
                  +
                  Example of overriding a _widget.gsp
                  -

                  In which case the tag will use f:widget to generate an appropriate input. Alternatively in more specialized cases you can give f:field a tag body. For example:

                  +

                  If you want to override a f:widget for a String, then create a file with content like this:

                  +
                  grails-app/views/_fields/string/_widget.gsp
                  -
                  <f:field bean="person" property="name">
                  -    <g:textField name="${property}" value="${value}"/>
                  -</f:field>
                  +
                  <g:textField name="${property}" value="${value}" required="${required}" class="form-control"/>
                  -
                  -

                  Since version 1.5 you can specify which specific templates are going to be used on the view. -You can accomplish this using new attributes: wrapper, widget and templates. (See attributes section)

                  -
                  -

                  Since version 2.1.4 you can specify the theme to be used.

                  -
                  -
                  -
                  <f:field bean="person" property="name" theme="bs-horizontal"/>
                  +
                  +

                  with

                  + +
                  +
                  +

                  f:with

                  +
                  +
                  Purpose
                  +
                  +

                  Places a bean in scope so that the bean attribute can be omitted on contained tags.

                  +
                  +
                  Example
                  -
                  // renders _fields/bootstrap3/_wrapper.gsp:
                  -<f:field bean="person" property="name" wrapper="bootstrap3"/>
                  -
                  -// renders _fields/maskedInput/_widget.gsp:
                  -<f:field bean="person" property="name" widget="maskedInput"/>
                  -
                  -// renders _fields/maskedInput/_wrapper.gsp and _fields/maskedInput/_widget.gsp:
                  -<f:field bean="person" property="name" templates="maskedInput"/>
                  -
                  -
                  -
                  -

                  See Customizing Field Rendering for details of the parameters passed to the tag body.

                  +
                  <f:with bean="person">
                  +    <f:field property="name"/>
                  +    <f:field property="address.city"/>
                  +</f:with>
                  -
                  -

                  The f:field tag handles embedded domain properties in a special way. See Embedded Properties for details.

                  -
                  Attributes
                  +
                  Attributes
                  ----+++ - - - + + + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - +
                  Table 7. Attributes for f:field
                  NameRequiredDescriptionNameRequired?Description

                  bean

                  yes for f:widget if not inside f:with, optional for f:field

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  property

                  bean

                  yes

                  The path to the property. This can include any level of nesting and numeric or string indexes. For example employees[0].address[home].street is a valid path. If absent, all properties will be displayed.

                  value

                  No

                  Overrides the actual value of the property.

                  default

                  No

                  A default value for the property that will be used if the actual property value is false.

                  required

                  No

                  Overrides the required status of the property. By default this is worked out based on the property’s constraints.

                  invalid

                  No

                  Overrides the validity of the property. By default this is worked out using the bean’s errors property for domain and command objects.

                  label

                  No

                  Overrides the field label passed to the template. This value may either be an i18n key or a literal string.

                  prefix

                  No

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  wrapper

                  No

                  Specifies the name of the folder inside _fields where the _wrapper.gsp template is located.

                  widget

                  No

                  Specifies the name of the folder inside \_fields where the \_widget.gsp template is located.

                  templates

                  No

                  Specifies the name of the folder inside _fields where the _wrapper.gsp and _widget.gsp templates are located. It is a shorthand for specifying both (wrapper and widget).

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  theme

                  prefix

                  String

                  Theme to use if available.

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  +
                  +
                  +
                  Extra attributes (Since version 2.1.4)
                  -

                  Any additional attributes are passed to the rendered template. Any additional attributes prefixed with widget- are instead passed to the widget template or rendered on the default input.

                  +

                  You can pass any number of extra attributes to the with tag that will be propagated to the inner fields and displays.

                  +
                  +
                  +
                  +
                  <f:with bean="person" wrapper="someWrapper">
                  + <f:field property="name"/>
                  + <f:field property="address.city"/>
                  +</f:with>
                  -
                  -
                  Example of overriding a _wrapper.gsp
                  -

                  If you want to override a f:wrapper to be used for all widgets then create a file with content like this:

                  +

                  That way you don’t need to repeat the same attribute over and over. +The code above is the same as:

                  -
                  grails-app/views/_fields/default/_wrapper.gsp
                  -
                  <div class="form-group ${invalid ? 'has-error' : ''}">
                  -    <label for="${property}">${label} ${required ? '*' : ''}</label>
                  -
                  -    <div>
                  -        <f:widget property="${property}"/>
                  -        <g:if test="${errors}">
                  -            <g:each in="${errors}" var="error">
                  -                <span class="help-block"><g:message error="${error}"/></span>
                  -            </g:each>
                  -        </g:if>
                  -    </div>
                  -</div>
                  +
                  <f:with bean="person">
                  + <f:field property="name" wrapper="someWrapper"/>
                  + <f:field property="address.city" wrapper="someWrapper"/>
                  +</f:with>
                  +
                  +
                  Override extra attributes
                  +
                  +

                  You can override the extra attributes on any field just changing the attribute value on the popper field or display

                  +
                  +
                  +
                  +
                  <f:with bean="person" wrapper="someWrapper">
                  + <f:field property="name"/>
                  + <f:field property="address.city"/>
                  + <f:field property="address.zip" wrapper="differentWrapper"/>
                  +</f:with>
                  +
                  +
                  +
                  + + + + + +
                  + + +Remember that if you want to use some of those attributes in the widget or displayWidget templates you need to prefix them with the widget- word (unless you have configured another prefix) +
                  -
                  -

                  input

                  -
                  -
                  -

                  f:input (DEPRECATED)

                  -
                  -
                  Deprecated since version 1.5
                  -
                  -

                  Use f:widget tag instead

                  -
                  -

                  table

                  -
                  -
                  -

                  f:table

                  -
                  -
                  Purpose
                  +
                  +

                  Changelog

                  +
                  +
                  +

                  Version 5.0.0 - Grails 5.3.x

                  -

                  <f:table/> renders some or all properties of a collection of beans in a table using the f:display widget for each property type. If there is no \_display template in scope the tag will simply render the property values.

                  -
                  +

                  In your build.gradle file, use:

                  -
                  -
                  Examples
                  -
                  <f:table collection="personList"/>
                  -
                  -<f:table collection="personList" properties="firstName, lastName"/>
                  -
                  -<f:table collection="personList" properties="['firstName', 'lastName']"/>
                  -
                  -<f:table collection="catsAndDogsList" domainClass="org.zoo.Animal"/>
                  -
                  -<f:table collection="catsAndDogsList" domainClass="org.zoo.Animal" theme="bs-horizontal"/>
                  -
                  -// List first three properties in Person
                  -<f:table collection="personList" maxProperties="3"/>
                  -
                  -// Include id, lastUpdated, dateCreated
                  -<f:table collection="personList" except="[]]"/>
                  +
                  implementation 'io.github.gpc:fields:5.0.0'
                  -

                  The template for <f:table/> should be in

                  +

                  Changelog: +https://github.com/gpc/fields/compare/v4.0.0...v5.0.0

                  -
                  -
                  -
                  grails-app/views/templates/_fields/_table.gsp
                  +
                  +

                  Version 4.0.0 - Grails 4.1.x

                  +
                  +

                  Important

                  -

                  but you can have multiple table templated, if you specify the template property. -All templates should still be located in view/templates/_fields/, the example below uses 4 different templates for table.

                  +

                  New group id.

                  +
                  +
                  +

                  In your build.gradle file, use:

                  -
                  <f:table collection="myList" myProperty="Template: view/templates/_fields/_table.gsp" />
                  -<f:table collection="${demoList}" template="table3" myProperty="Template: view/templates/_fields/_table3.gsp" />
                  -<f:table collection="${demoList}" template="tables/table2" myProperty="Template: in view/templates/_fields/tables/_table2.gsp" />
                  -<f:table collection="${demoList}" template="tables/table" myProperty="Template: view/templates/_fields/tables/_table.gsp" />
                  +
                  compile 'io.github.gpc:fields:4.0.0'
                  -

                  When theme is specified, the \_display template will be searched first in theme, but the theme property does not directly apply to table.

                  -
                  -
                  -
                  -
                  Attributes
                  - ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  NameRequired?DefaultDescription

                  collection

                  yes

                  The collection of beans to be displayed

                  domainClass

                  Class of first element in collection

                  The FQN of the domain class of the elements in the collection.

                  properties

                  First 7 (or less)

                  Comma-separated String or List of properties to be shown (table columns). Defaults to the first 7 (or less) properties of the domain class ordered by the domain class' constraints, unless maxProperties is set below

                  displayStyle

                  Determines the display template used for the bean’s properties. Defaults to table meaning that \_display-table templates will be used when available.

                  except

                  ['id', 'lastUpdated', 'dateCreated']

                  A comma-separated String or List of properties that should be skipped. Use the empty list to include id, lastUpdated and dateCreated

                  order

                  Comma-separated String or List of properties which represents the order in which the tag should display them.

                  theme

                  String

                  Theme to use if available.

                  maxProperties

                  Number

                  7

                  The maximum number of properties to display when rendering the table. If zero is specified all columns are shown, otherwise properties[0..<maxProperties] are shown. maxProperties can be negative.

                  template

                  String

                  table

                  Alternative template for table rendering. Templates should be in the grails-app/views/templates/_fields/ folder.

                  -
                  -
                  -
                  Any additional attributes are passed to the rendered template.
                  +

                  Changelog: +https://github.com/gpc/fields/compare/v3.0.0.RC1...v4.0.0

                  +
                  +

                  Thank goes to the community for all the contributions!

                  -
                  -
                  Modifying the _table.gsp template.
                  +
                  +

                  Version 3.0.0.RC1 - Grails 4.0.x

                  -

                  To make you own version of a f:table template, the file should be located in grails-app/views/templates/_fields/_table.gsp -unless a different location is specified with the template property. -You can find a starting point for a new file on GitHub

                  +

                  Last version that is on the "old" group org.grails.plugins

                  -
                  -
                  Model in the template
                  -

                  The following model is passed to the _table.gsp template:

                  +

                  Changelog: +https://github.com/gpc/fields/compare/v2.2.10...v3.0.0.RC1

                  - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  NameContent

                  domainClass

                  The type of the persistent instance. Either type of the first row in the collection or the domainClass passed as argument to f:table

                  columnProperties

                  Contains a list of Map describing each table column. See table below for the map content

                  domainProperties

                  deprecated: see columnProperties

                  collection

                  Rows with data

                  displayStyle

                  The attribute displayStyle passed to the model unmodified

                  theme

                  The attribute theme passed to the model unmodified

                  -
                  -

                  The column model:

                  - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                  NameContent

                  bean

                  Empty instance of a domainClass bean

                  property

                  The property name

                  name

                  Deprecated, see property

                  type

                  The property type

                  defaultLabel

                  Translated label (deprecated)

                  label

                  Translated label

                  constraints

                  If the property has constraints

                  required

                  Is the property required

                  +
                  +

                  Version 2.2.9.BUILD-SNAPSHOT

                  -

                  (This is a simplified version of a wrapper model)

                  +

                  Changelog: +https://github.com/grails-fields-plugin/grails-fields/compare/v2.2.8...v2.2.9

                  +
                  +
                  +

                  Version 2.2.8

                  +
                  +
                    +
                  • +

                    BugFix: Table Tag does not render transient fields correctly (Issue #264)

                    +
                  • +
                  • +

                    BugFix: Table Tag does not render references correctly! +(Issue #269)

                    +
                  • +
                  • +

                    BugFix: Fix XSS vulnerability when rendering beans (Issue #278) +GitHub diff

                    +
                  • +
                  +
                  +

                  Version 2.2.7

                  +
                  +
                    +
                  • +

                    BugFix: The fix for #257 did not work as described, but now it does.

                    +
                  • +
                  • +

                    Improvement: Documentation has been improved with more examples for the various tags. +GitHub diff

                    +
                  • +
                  +
                  -
                  -

                  widget

                  - +
                  +

                  Version 2.2.6

                  +
                  +
                    +
                  • +

                    Improvement: Documentation of maxProperties on <f:table/>

                    +
                  • +
                  • +

                    Improvement: <f:table\> can now show id, lastUpdated and dateCreated (see f:table doc). +Injecting DomainModelService instead of instantiating DomainModelServiceImpl in FormsFieldTagLib (Issue #257)

                    +
                  • +
                  -
                  -

                  f:widget

                  -
                  -
                  Purpose
                  -

                  f:widget renders an appropriate widget for a property, for example an <input type="text"> element for a String property or a <select> for an enum.

                  +

                  GitHub diff

                  -
                  - - - - - -
                  - - -Using f:widget directly will only be necessary for very specialized cases, usually it will be invoked via f:field. -
                  +
                  +

                  Version 2.2.4/2.2.5

                  +
                  +
                    +
                  • +

                    Improvement: Introduced maxProperties attribute to <f:table/>

                    +
                  • +
                  • +

                    Improvement: Render value that is an association but not to a grom entity

                    +
                  • +
                  • +

                    Improvement: Rendering numbers is now Locale-aware (can be configured)

                    +
                  • +
                  -
                  -
                  Attributes
                  -

                  f:widget accepts exactly the same attributes as the f:field tag (except for wrapper and templates attributes).

                  +

                  GitHub diff

                  -
                  -
                  Default rendering
                  -
                  -

                  The <f:widget/> tag will will by default use sensible defaults when rendering String, Number, Boolean, URL, Enum, Date and associations like oneToOne, oneToMany, manyToOne and manyToMany.

                  +
                  +

                  Version 2.2.3

                  +
                  +
                    +
                  • +

                    Bug-fix: Another issue with old API

                    +
                  • +
                  -

                  In a few cases it is possible to control which default widget to use, by specifying it in the beans constraints.

                  +

                  GitHub diff

                  -
                  -

                  The following happens with these types:

                  -
                  -
                  String
                  +
                  +

                  Version 2.2.2

                  +
                  +
                    +
                  • +

                    Bug-fix: Fix issue with oneToMany expecting the old API

                    +
                  • +
                  +
                  -

                  By default, properties instance of String renders a <g:field type="text"> type field, but the constraints in the bean will alter this in these cases:

                  +

                  GitHub diff

                  - ---- - - - - - - - - - - - - - - - - - - - - - - - - - - -

                  constraint

                  Rendered Widget type

                  inList

                  <g:select/>. If the field is not required, a noSelection is added to the select

                  password: true

                  <g:field type="password"/>

                  email: true

                  <g:field type="email"/>

                  url: true

                  <g:field type="url"/>

                  widget: 'textarea'

                  <g:textArea/>

                  -
                  -
                  Numeric and primitive types
                  -
                  -

                  By default, properties instance of Number renders a <g:field type="number"> or <:field type="number decimal"/> type field, but the constraints in the bean will alter this in these cases:

                  +
                  +

                  Version 2.2.1

                  +
                  +
                    +
                  • +

                    Bug-fix: Autowire beans

                    +
                  • +
                  - ---- - - - - - - - - - - - - - - - - - - -

                  constraint

                  Affects the rendered widget

                  scale

                  Sets the step attribute on the input field

                  min

                  Set the min attribute on the input field

                  max

                  Set the max attribute on the input field

                  -

                  By default, the value is formatted with the default numberFormatter based on the request locale.

                  +

                  GitHub diff

                  -
                  -

                  This behavior can be turned off in the configuration by setting:

                  -
                  -
                  -
                  grails:
                  -    plugin:
                  -        fields:
                  -            localizeNumbers: false
                  +
                  +

                  Version 2.2.0

                  +
                  +
                    +
                  • +

                    Conversion to the Mapping Context API. +Usages of the GrailsDomainClass and GrailsDomainClassProperty classes have been removed. +If you extend a template that relies on those classes, they have been replaced with PersistentEntity and DomainProperty respectively.

                    +
                  • +
                  • +

                    Conversion of constraints to a common implementation between grails.validation and grails.gorm.validation. +See Constrained.

                    +
                  • +
                  +
                  +
                  +

                  Version 2.1.4

                  +
                  +
                    +
                  • +

                    Upgrade to Grails 3.2.8

                    +
                  • +
                  • +

                    Convert documentation to Asciidoc

                    +
                  • +
                  • +

                    Add support for themes

                    +
                  • +
                  -
                  -
                  Boolean
                  -

                  Renders a <g:checkBox/>

                  +

                  GitHub diff from 2.1.1 to 2.1.4

                  -
                  -
                  URL
                  -
                  -

                  Renders a <g:field type="url"/>

                  +
                  +

                  Version 2.0

                  +
                  +
                    +
                  • +

                    Redesign for Grails 3.0

                    +
                  • +
                  -
                  -
                  Enum
                  +
                  +

                  Version 1.5

                  -

                  enum types always renders a <g:select/> with all the values in the type. To render a subset of enum values, the inList constraint can be used.

                  -
                  +

                  2015_04_26

                  -
                  -
                  Date, Calendar, java.sql.Date and java.sql.Time
                  -
                  -

                  Renders a <g:datePicker/>. If Date, Calendar, or java.sql.Date then precision is set to day, if java.sql.Time then minute

                  +
                  +
                  +
                  + + + + + +
                  + + +See Usage and Customizing Field Rendering for breaking changes. +
                  -
                  -
                  byte[], Byte[], Blob
                  -
                  -

                  Renders a <g:field type="file"/>

                  +
                  +

                  Version 1.4

                  +
                  +
                    +
                  • +

                    Upgraded plugin to work with Grails 2.3.x (Issue #122)

                    +
                  • +
                  • +

                    Fixed missing property exception (Issue #134)

                    +
                  • +
                  • +

                    Fixed encoding in tag libraries (Issue #137)

                    +
                  • +
                  • +

                    Configuring caching in dev mode (Issue #139)

                    +
                  • +
                  • +

                    byte[] and Byte[] arrays types now look for files in byteArray folders (general for all array types) (Issue #144)

                    +
                  • +
                  -
                  -
                  oneToOne, manyToOne or manyToMany associations
                  -

                  All these associations renders a <g:select/> and if association has a nullable: true constraint, then a noSelection attribute is added.

                  +

                  Browse issues

                  -
                  -

                  For the manyToMany association, the multiple attribute is set.

                  +
                  +

                  Version 1.3

                  -

                  oneToOne and `manyToOne renders a

                  +

                  2012-07-31

                  +
                  +
                    +
                  • +

                    Adds the f:display tag.

                    +
                  • +
                  • +

                    Supports overriding templates by property type or by default in individual controllers and actions.

                    +
                  • +
                  -
                  -
                  oneToMany association
                  -

                  The oneToMany association does not render an input type field, but does instead render a list of links to the associated objects.

                  +

                  Browse issues +Thanks to https://github.com/cdeszaq,[Rick Jensen] https://github.com/delight,[Konstantinos Kostarellis] Gus Power and Eliot Sykes for their contributions.

                  -
                  -
                  Example of overriding a _widget.gsp
                  +
                  +

                  Version 1.2

                  -

                  If you want to override a f:widget for a String, then create a file with content like this:

                  +

                  2012-03-16

                  -
                  -
                  grails-app/views/_fields/string/_widget.gsp
                  -
                  -
                  <g:textField name="${property}" value="${value}" required="${required}" class="form-control"/>
                  +
                  +
                    +
                  • +

                    Pass attributes from f:field to the rendered input using input- prefix.

                    +
                  • +
                  • +

                    Optionally use entire property path for label key.

                    +
                  • +
                  +
                  +

                  Browse issues +Thanks to Brian Saville and OverZealous for contributions.

                  +
                  +

                  Version 1.1

                  +
                  +

                  2012-03-11

                  -
                  -

                  with

                  - +
                  +
                    +
                  • +

                    Adds the prefix attribute.

                    +
                  • +
                  • +

                    Support widget:'textarea' constraint.

                    +
                  • +
                  -
                  -

                  f:with

                  -
                  -
                  Purpose
                  -

                  Places a bean in scope so that the bean attribute can be omitted on contained tags.

                  -
                  +

                  Browse issues +Thanks to Brian Saville for contributions.

                  -
                  -
                  Example
                  -
                  -
                  -
                  <f:with bean="person">
                  -    <f:field property="name"/>
                  -    <f:field property="address.city"/>
                  -</f:with>
                  +
                  +

                  Version 1.0.4

                  +
                  +

                  2012-02-13: Bugfix release.

                  + -
                  -
                  Attributes
                  - ----- - - - - - - - - - - - - - - - - - - - -
                  NameRequired?Description

                  bean

                  yes

                  The bean whose property is being rendered. This can be the object itself or the name of a page-scope variable.

                  prefix

                  String

                  A string (including the trailing period) that should be appended before the input name such as name="${prefix}propertyName". The label is also modified.

                  -
                  -
                  Extra attributes (Since version 2.1.4)
                  +
                  +

                  Version 1.0.3

                  -

                  You can pass any number of extra attributes to the with tag that will be propagated to the inner fields and displays.

                  +

                  2012-02-09: Bugfix release.

                  -
                  -
                  -
                  <f:with bean="person" wrapper="someWrapper">
                  - <f:field property="name"/>
                  - <f:field property="address.city"/>
                  -</f:with>
                  +
                  +
                  +

                  Version 1.0.2

                  -

                  That way you don’t need to repeat the same attribute over and over. -The code above is the same as:

                  -
                  -
                  -
                  -
                  <f:with bean="person">
                  - <f:field property="name" wrapper="someWrapper"/>
                  - <f:field property="address.city" wrapper="someWrapper"/>
                  -</f:with>
                  +

                  2012-02-07: Bugfix release.

                  +
                  -
                  -
                  Override extra attributes
                  +
                  +

                  Version 1.0.1

                  -

                  You can override the extra attributes on any field just changing the attribute value on the popper field or display

                  -
                  -
                  -
                  -
                  <f:with bean="person" wrapper="someWrapper">
                  - <f:field property="name"/>
                  - <f:field property="address.city"/>
                  - <f:field property="address.zip" wrapper="differentWrapper"/>
                  -</f:with>
                  +

                  2012-02-03: Bugfix release.

                  + -
                  - - - - - -
                  - - -Remember that if you want to use some of those attributes in the widget or displayWidget templates you need to prefix them with the widget- word (unless you have configured another prefix) -
                  +
                  +

                  Version 1

                  +
                  +

                  2012-02-01: Initial release.

                  +
                  @@ -2822,98 +2957,9 @@
                  Override extra attributes
                  - \ No newline at end of file