diff --git a/5.0.1/api/allclasses-frame.html b/5.0.1/api/allclasses-frame.html
new file mode 100644
index 00000000..c711275d
--- /dev/null
+++ b/5.0.1/api/allclasses-frame.html
@@ -0,0 +1,50 @@
+
+
+
+
+All Classes
+
+
+
+
+
+
+
+ All Classes
+
+
+
diff --git a/5.0.1/api/deprecated-list.html b/5.0.1/api/deprecated-list.html
new file mode 100644
index 00000000..77e7b701
--- /dev/null
+++ b/5.0.1/api/deprecated-list.html
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+ Deprecated API (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/Application.html b/5.0.1/api/grails/plugin/formfields/Application.html
new file mode 100644
index 00000000..bd3f597c
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/Application.html
@@ -0,0 +1,321 @@
+
+
+
+
+
+
+
+
+
+
+ Application (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.Application
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inherited fields
+
+ Fields inherited from class
+ Fields
+
+
+ class grails.boot.config.GrailsAutoConfiguration
+ __$stMC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+ Constructors
+
+ Constructor and description
+
+
+
+
+ Application
+ ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ static void
+ main (java.lang.String[] args)
+
+
+
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ class grails.boot.config.GrailsAutoConfiguration
+ grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#doWithDynamicMethods(), grails.boot.config.GrailsAutoConfiguration#doWithApplicationContext(), grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#onStartup(java.util.Map), grails.boot.config.GrailsAutoConfiguration#doWithSpring(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#onConfigChange(java.util.Map), grails.boot.config.GrailsAutoConfiguration#packageNames(), 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#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#invokeMethod(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ static void main (java.lang.String[] args)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessor.html b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessor.html
new file mode 100644
index 00000000..8ebc9515
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessor.html
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+ BeanPropertyAccessor (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+ Summary:
+ Nested Field Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ abstract grails.core.GrailsDomainClass
+ getBeanClass ()
Returns: the GORM domain type of `beanType`.
+
+
+
+
+ abstract java.util.List<java.lang.Class>
+ getBeanSuperclasses ()
Returns: all superclasses and interfaces of `beanType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+
+
+
+
+ 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.
+
+
+
+
+ abstract 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 java.lang.String
+ getDefaultLabel ()
Returns: default label text for the property at the end of the path.
+
+
+
+
+ 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.
+
+
+
+
+ abstract org.grails.datastore.mapping.model.PersistentEntity
+ getEntity ()
Returns: the GORM domain type of `beanType`.
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ abstract java.lang.String
+ getPathFromRoot ()
Returns: the full path from the root bean to the requested property.
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ abstract java.util.List<java.lang.Class>
+ getPropertyTypeSuperclasses ()
Returns: all superclasses and interfaces of `propertyType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ 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.
+
+
+
+
+ abstract boolean
+ isInvalid ()
Returns: whether or not the property has any validation errors (i.e.
+
+
+
+
+ abstract boolean
+ isRequired ()
Returns: whether or not the property is required as determined by constraints.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ @java.lang.Deprecated
+abstract grails.core.GrailsDomainClass getBeanClass ()
+
deprecated: use getEntity Returns: the GORM domain type of `beanType`. This will be null if `beanType` is not a domain class.
+
+
+
+
+
+
+ abstract java.util.List<java.lang.Class> getBeanSuperclasses ()
+
Returns: all superclasses and interfaces of `beanType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ abstract 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. This will be null for non-domain properties.
+
+
+
+
+
+
+ abstract java.lang.String getDefaultLabel ()
+
Returns: default label text for the property at the end of the path.
+
+
+
+
+
+
+ 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. This will be null for non-domain properties.
+
+
+
+
+
+
+ abstract org.grails.datastore.mapping.model.PersistentEntity getEntity ()
+
Returns: the GORM domain type of `beanType`. This will be null if `beanType` is not a domain class.
+
+
+
+
+
+
+ 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. This will be an empty list if there are no errors or the property is not a validateable type.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ abstract java.lang.String getPathFromRoot ()
+
Returns: the full path from the root bean to the requested property.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ abstract java.util.List<java.lang.Class> getPropertyTypeSuperclasses ()
+
Returns: all superclasses and interfaces of `propertyType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ abstract boolean isInvalid ()
+
Returns: whether or not the property has any validation errors (i.e. `getErrors` will return a non-empty list). This will always be false for non-validateable types.
+
+
+
+
+
+
+ abstract boolean isRequired ()
+
Returns: whether or not the property is required as determined by constraints. This will always be false for non-validateable types.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Summary:
+ Nested Field Method
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html
new file mode 100644
index 00000000..536798f3
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html
@@ -0,0 +1,397 @@
+
+
+
+
+
+
+
+
+
+
+ BeanPropertyAccessorFactory (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.BeanPropertyAccessorFactory
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ BeanPropertyAccessor
+ accessorFor (java.lang.Object bean, java.lang.String propertyPath)
+
+
+
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ org.grails.datastore.gorm.validation.constraints.eval.ConstraintsEvaluator constraintsEvaluator
+
+
+
+
+
+
+
+ org.grails.scaffolding.model.property.DomainPropertyFactory fieldsDomainPropertyFactory
+
+
+
+
+
+
+
+ grails.core.GrailsApplication grailsApplication
+
+
+
+
+
+
+
+ org.grails.datastore.mapping.model.MappingContext grailsDomainClassMappingContext
+
+
+
+
+
+
+
+ grails.core.support.proxy.ProxyHandler proxyHandler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ BeanPropertyAccessorFactory ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html
new file mode 100644
index 00000000..94b794f7
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html
@@ -0,0 +1,574 @@
+
+
+
+
+
+
+
+
+
+
+ BeanPropertyAccessorImpl (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.BeanPropertyAccessorImpl
+
+
+
+
+
+
+ All Implemented Interfaces and Traits:
+ BeanPropertyAccessor
+
+
+
+
+
+
+
+@groovy.transform.CompileStatic
+@groovy.transform.Canonical
+@groovy.transform.TupleConstructor(includes: [beanType, propertyName, propertyType])
+class BeanPropertyAccessorImpl
+extends java.lang.Object
+implements BeanPropertyAccessor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+ Properties
+
+ Type
+ Name and description
+
+
+
+ grails.core.GrailsDomainClass
+ beanClass
+
+
+
+ java.lang.Class
+ beanType
+
+
+
+ org.grails.scaffolding.model.property.Constrained
+ constraints
+
+
+
+ org.grails.datastore.mapping.model.PersistentProperty
+ domainProperty
+
+
+
+ org.grails.datastore.mapping.model.PersistentEntity
+ entity
+
+
+
+ grails.core.GrailsApplication
+ grailsApplication
+
+
+
+ java.lang.String
+ pathFromRoot
+
+
+
+ java.lang.String
+ propertyName
+
+
+
+ java.lang.Class
+ propertyType
+
+
+
+ java.lang.Object
+ rootBean
+
+
+
+ java.lang.Class
+ rootBeanType
+
+
+
+ java.lang.Object
+ value
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ grails.core.GrailsDomainClass beanClass
+
+
+
+
+
+
+
+ java.lang.Class beanType
+
+
+
+
+
+
+
+ org.grails.scaffolding.model.property.Constrained constraints
+
+
+
+
+
+
+
+ org.grails.datastore.mapping.model.PersistentProperty domainProperty
+
+
+
+
+
+
+
+ org.grails.datastore.mapping.model.PersistentEntity entity
+
+
+
+
+
+
+
+ grails.core.GrailsApplication grailsApplication
+
+
+
+
+
+
+
+ java.lang.String pathFromRoot
+
+
+
+
+
+
+
+ java.lang.String propertyName
+
+
+
+
+
+
+
+ java.lang.Class propertyType
+
+
+
+
+
+
+
+ java.lang.Object rootBean
+
+
+
+
+
+
+
+ java.lang.Class rootBeanType
+
+
+
+
+
+
+
+ java.lang.Object value
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ BeanPropertyAccessorImpl ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ java.util.List<java.lang.Class> getBeanSuperclasses ()
+
+
+
+
+
+
+
+ java.lang.String getDefaultLabel ()
+
+
+
+
+
+
+
+ java.util.List<org.springframework.validation.FieldError> getErrors ()
+
+
+
+
+
+
+
+ java.util.List<java.lang.String> getLabelKeys ()
+
+
+
+
+
+
+
+ java.util.List<java.lang.Class> getPropertyTypeSuperclasses ()
+
+
+
+
+
+
+
+ boolean isInvalid ()
+
+
+
+
+
+
+
+ boolean isRequired ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html b/5.0.1/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html
new file mode 100644
index 00000000..c3933c6e
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html
@@ -0,0 +1,615 @@
+
+
+
+
+
+
+
+
+
+
+ DelegatingBeanPropertyAccessorImpl (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.DelegatingBeanPropertyAccessorImpl
+
+
+
+
+
+
+ All Implemented Interfaces and Traits:
+ BeanPropertyAccessor
+
+
+
+
+
+
+
+@groovy.transform.CompileStatic
+@groovy.transform.Canonical
+@groovy.transform.ToString(includes: [beanType, propertyName, propertyType])
+class DelegatingBeanPropertyAccessorImpl
+extends java.lang.Object
+implements BeanPropertyAccessor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+ Properties
+
+ Type
+ Name and description
+
+
+
+ java.lang.Class
+ beanType
+
+
+
+ java.lang.String
+ propertyName
+
+
+
+ java.lang.Class
+ propertyType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+ Constructors
+
+ Constructor and description
+
+
+
+
+ DelegatingBeanPropertyAccessorImpl
+ (java.lang.Object rootBean, java.lang.Object value, java.lang.Class propertyType, java.lang.String pathFromRoot, org.grails.scaffolding.model.property.DomainProperty domainProperty)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ final java.lang.Class beanType
+
+
+
+
+
+
+
+ final java.lang.String propertyName
+
+
+
+
+
+
+
+ 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)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ @java.lang.Override
+boolean equals (java.lang.Object obj)
+
+
+
+
+
+
+
+ @java.lang.Override
+@java.lang.Deprecated
+grails.core.GrailsDomainClass getBeanClass ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.util.List<java.lang.Class> getBeanSuperclasses ()
+
+
+
+
+
+
+
+ @java.lang.Override
+org.grails.scaffolding.model.property.Constrained getConstraints ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.lang.String getDefaultLabel ()
+
+
+
+
+
+
+
+ @java.lang.Override
+org.grails.datastore.mapping.model.PersistentProperty getDomainProperty ()
+
+
+
+
+
+
+
+ @java.lang.Override
+org.grails.datastore.mapping.model.PersistentEntity getEntity ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.util.List<org.springframework.validation.FieldError> getErrors ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.util.List<java.lang.String> getLabelKeys ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.lang.String getPathFromRoot ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.util.List<java.lang.Class> getPropertyTypeSuperclasses ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.lang.Object getRootBean ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.lang.Class getRootBeanType ()
+
+
+
+
+
+
+
+ @java.lang.Override
+java.lang.Object getValue ()
+
+
+
+
+
+
+
+ @java.lang.Override
+int hashCode ()
+
+
+
+
+
+
+
+ @java.lang.Override
+boolean isInvalid ()
+
+
+
+
+
+
+
+ @java.lang.Override
+boolean isRequired ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/FieldsGrailsPlugin.html b/5.0.1/api/grails/plugin/formfields/FieldsGrailsPlugin.html
new file mode 100644
index 00000000..13c5eccd
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/FieldsGrailsPlugin.html
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+
+
+
+
+ FieldsGrailsPlugin (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.FieldsGrailsPlugin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Inherited fields
+
+ Fields inherited from class
+ Fields
+
+
+ class grails.plugins.Plugin
+ __$stMC
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ groovy.lang.Closure
+ doWithSpring ()
+
+
+
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ class grails.plugins.Plugin
+ grails.plugins.Plugin#onChange(java.util.Map), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#setPlugin(grails.plugins.GrailsPlugin), grails.plugins.Plugin#setPluginManager(grails.plugins.GrailsPluginManager), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithApplicationContext(), 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#getConfig(), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#onStartup(java.util.Map), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#getGrailsApplication(), grails.plugins.Plugin#onConfigChange(java.util.Map), grails.plugins.Plugin#isEnabled(), grails.plugins.Plugin#setEnabled(boolean), grails.plugins.Plugin#onShutdown(java.util.Map), grails.plugins.Plugin#getMetaClass(), grails.plugins.Plugin#setMetaClass(groovy.lang.MetaClass), grails.plugins.Plugin#getManager(), 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#invokeMethod(java.lang.String, java.lang.Object), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object), grails.plugins.Plugin#getProperty(java.lang.String)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ static final java.lang.String CONSTRAINTS_EVALULATOR_BEAN_NAME
+
+
+
+
+
+
+
+ java.lang.Object grailsVersion
+
+
+
+
+
+
+
+ java.lang.Object loadAfter
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ FieldsGrailsPlugin ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ @java.lang.Override
+groovy.lang.Closure doWithSpring ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html
new file mode 100644
index 00000000..30319086
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+ FormFieldsTagLib.BeanAndPrefix (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.FormFieldsTagLib.BeanAndPrefix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+ Properties
+
+ Type
+ Name and description
+
+
+
+ java.lang.Object
+ bean
+
+
+
+ java.util.Map<java.lang.String, java.lang.Object>
+ innerAttributes
+
+
+
+ java.lang.String
+ prefix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ java.lang.Object bean
+
+
+
+
+
+
+
+ java.util.Map<java.lang.String, java.lang.Object> innerAttributes
+
+
+
+
+
+
+
+ java.lang.String prefix
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ FormFieldsTagLib.BeanAndPrefix ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html
new file mode 100644
index 00000000..9aaff1e8
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+ FormFieldsTagLib.BeanAndPrefixStack (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.FormFieldsTagLib.BeanAndPrefixStack
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ java.lang.Object
+ getBean ()
+
+
+
+
+ java.util.Map<java.lang.String, java.lang.Object>
+ getInnerAttributes ()
+
+
+
+
+ java.lang.String
+ getPrefix ()
+
+
+
+
+ java.lang.String
+ toString ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ FormFieldsTagLib.BeanAndPrefixStack ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ java.lang.Object getBean ()
+
+
+
+
+
+
+
+ java.util.Map<java.lang.String, java.lang.Object> getInnerAttributes ()
+
+
+
+
+
+
+
+ java.lang.String getPrefix ()
+
+
+
+
+
+
+
+ java.lang.String toString ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.html b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.html
new file mode 100644
index 00000000..f6e44691
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/FormFieldsTagLib.html
@@ -0,0 +1,790 @@
+
+
+
+
+
+
+
+
+
+
+ FormFieldsTagLib (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.FormFieldsTagLib
+
+
+
+
+
+
+
+
+
+
+ Nested Class Summary
+
+
+
+
+
+
+
+
+
+
+
+ Field Summary
+
+
+ Fields
+
+ Modifiers
+ Name
+ Description
+
+
+
+ static java.lang.String
+ DISPLAY_STYLE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+ Properties
+
+ Type
+ Name and description
+
+
+
+ static java.lang.String
+ STACK_PAGE_SCOPE_VARIABLE
+
+
+
+ java.lang.Object
+ all
attr: bean REQUIRED Name of the source bean in the GSP model.
+
+
+
+
+ BeanPropertyAccessorFactory
+ beanPropertyAccessorFactory
+
+
+
+ org.grails.encoder.CodecLookup
+ codecLookup
+
+
+
+ static java.lang.Object
+ defaultEncodeAs
+
+
+
+ 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
+
+
+
+ java.lang.Object
+ field
attr: bean Name of the source bean in the GSP model.
+
+
+
+
+ org.grails.scaffolding.model.property.DomainPropertyFactory
+ fieldsDomainPropertyFactory
+
+
+
+ FormFieldsTemplateService
+ formFieldsTemplateService
+
+
+
+ java.lang.Object
+ input
deprecated: since version 1.5 - Use widget instead attr: bean Name of the source bean in the GSP model.
+
+
+
+
+ org.springframework.web.servlet.LocaleResolver
+ localeResolver
+
+
+
+ java.lang.Boolean
+ localizeNumbers
+
+
+
+ java.util.Collection<org.grails.datastore.mapping.model.MappingContext>
+ mappingContexts
+
+
+
+ org.springframework.context.MessageSource
+ messageSource
+
+
+
+ static java.lang.Object
+ namespace
+
+
+
+ java.lang.Object
+ table
Renders a collection of beans in a table
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+ Constructors
+
+ Constructor and description
+
+
+
+
+ FormFieldsTagLib
+ ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Field Detail
+
+
+
+
+ public static final java.lang.String DISPLAY_STYLE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+ org.grails.encoder.CodecLookup codecLookup
+
+
+
+
+
+
+
+ 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: template OPTIONAL The template used when rendering the domainClass
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+ org.grails.scaffolding.model.DomainModelService domainModelService
+
+
+
+
+
+
+
+ java.lang.Object field
+
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: value Specifies the initial value to display in the field. The default is
+ 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
+
+
+
+
+
+
+ org.grails.scaffolding.model.property.DomainPropertyFactory fieldsDomainPropertyFactory
+
+
+
+
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+ org.springframework.web.servlet.LocaleResolver localeResolver
+
+
+
+
+
+
+
+ @org.springframework.beans.factory.annotation.Value(value: ${grails.plugin.fields.localizeNumbers:true})
+java.lang.Boolean localizeNumbers
+
+
+
+
+
+
+
+ @org.springframework.beans.factory.annotation.Autowired(required: false)
+java.util.Collection<org.grails.datastore.mapping.model.MappingContext> mappingContexts
+
+
+
+
+
+
+
+ org.springframework.context.MessageSource messageSource
+
+
+
+
+
+
+
+ static final java.lang.Object namespace
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+ 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.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ FormFieldsTagLib ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+
+
+
+ @groovy.transform.CompileStatic
+protected java.lang.String getDefaultNumberType (java.util.Map model)
+
+
+
+
+
+
+
+ @groovy.transform.CompileStatic
+protected java.util.Locale getLocale ()
+
+
+
+
+
+
+
+ @groovy.transform.CompileStatic
+protected java.text.NumberFormat getNumberFormatter ()
+
+
+
+
+
+
+
+ java.lang.CharSequence renderDateTimeInput (java.util.Map model, java.util.Map attrs)
+
+
+
+
+
+
+
+ java.lang.CharSequence renderDefaultInput (java.util.Map model, java.util.Map attrs)
+
+
+
+
+
+
+
+ java.lang.CharSequence 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)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/FormFieldsTemplateService.html b/5.0.1/api/grails/plugin/formfields/FormFieldsTemplateService.html
new file mode 100644
index 00000000..e7d7e0b7
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/FormFieldsTemplateService.html
@@ -0,0 +1,481 @@
+
+
+
+
+
+
+
+
+
+
+ FormFieldsTemplateService (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.FormFieldsTemplateService
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Field Summary
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+ Properties
+
+ Type
+ Name and description
+
+
+
+ grails.core.GrailsApplication
+ grailsApplication
+
+
+
+ org.grails.web.gsp.io.GrailsConventionGroovyPageLocator
+ groovyPageLocator
+
+
+
+ grails.plugins.GrailsPluginManager
+ pluginManager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+ Methods
+
+ Type Params
+ Return Type
+ Name and description
+
+
+
+
+ java.util.Map
+ findTemplate (BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme)
+
+
+
+
+ java.lang.String
+ getTemplateFor (java.lang.String property)
+
+
+
+
+ protected java.lang.String
+ getWidget (org.grails.scaffolding.model.property.Constrained cp, java.lang.Class propertyType)
+
+
+
+
+ java.lang.String
+ getWidgetPrefix ()
+
+
+
+
+ static java.lang.String
+ toPropertyNameFormat (java.lang.Class type)
+
+
+
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Field Detail
+
+
+
+
+ public static final java.lang.String DISABLE_LOOKUP_CACHE
+
+
+
+
+
+
+
+ public static final java.lang.String SETTING_WIDGET_PREFIX
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ @org.springframework.beans.factory.annotation.Autowired
+grails.core.GrailsApplication grailsApplication
+
+
+
+
+
+
+
+ @org.springframework.beans.factory.annotation.Autowired
+org.grails.web.gsp.io.GrailsConventionGroovyPageLocator groovyPageLocator
+
+
+
+
+
+
+
+ @org.springframework.beans.factory.annotation.Autowired
+grails.plugins.GrailsPluginManager pluginManager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ FormFieldsTemplateService ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ java.util.Map findTemplate (BeanPropertyAccessor propertyAccessor, java.lang.String templateName, java.lang.String templatesFolder, java.lang.String theme)
+
+
+
+
+
+
+
+ java.lang.String getTemplateFor (java.lang.String property)
+
+
+
+
+
+
+
+ protected java.lang.String getWidget (org.grails.scaffolding.model.property.Constrained cp, java.lang.Class propertyType)
+
+
+
+
+
+
+
+ java.lang.String getWidgetPrefix ()
+
+
+
+
+
+
+
+ static java.lang.String toPropertyNameFormat (java.lang.Class type)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/PropertyPathAccessor.html b/5.0.1/api/grails/plugin/formfields/PropertyPathAccessor.html
new file mode 100644
index 00000000..8b4f3c1f
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/PropertyPathAccessor.html
@@ -0,0 +1,568 @@
+
+
+
+
+
+
+
+
+
+
+ PropertyPathAccessor (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+grails.plugin.formfields.PropertyPathAccessor
+
+
+
+
+
+
+ All Implemented Interfaces and Traits:
+ BeanPropertyAccessor
+
+
+
+
+
+
+
+@groovy.transform.CompileStatic
+@groovy.transform.Canonical
+@groovy.transform.ToString(includes: [beanType, propertyName, propertyType])
+class PropertyPathAccessor
+extends java.lang.Object
+implements BeanPropertyAccessor
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Properties Summary
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Summary
+
+
+ Constructors
+
+ Constructor and description
+
+
+
+
+ PropertyPathAccessor
+ (java.lang.String pathFromRoot)
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Methods Summary
+
+
+
+
+ Inherited Methods Summary
+
+
+ Inherited Methods
+
+ Methods inherited from class
+ Name
+
+
+
+ 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()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Property Detail
+
+
+
+
+ final java.lang.Class beanType
+
+
+
+
+
+
+
+ final java.lang.String pathFromRoot
+
+
+
+
+
+
+
+ final java.lang.String propertyName
+
+
+
+
+
+
+
+ final java.lang.Class propertyType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Constructor Detail
+
+
+
+
+ PropertyPathAccessor (java.lang.String pathFromRoot)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Method Detail
+
+
+
+
+ grails.core.GrailsDomainClass getBeanClass ()
+
+
+
+
+
+
+
+ java.util.List<java.lang.Class> getBeanSuperclasses ()
+
+
+
+
+
+
+
+ org.grails.scaffolding.model.property.Constrained getConstraints ()
+
+
+
+
+
+
+
+ java.lang.String getDefaultLabel ()
+
+
+
+
+
+
+
+ org.grails.datastore.mapping.model.PersistentProperty getDomainProperty ()
+
+
+
+
+
+
+
+ org.grails.datastore.mapping.model.PersistentEntity getEntity ()
+
+
+
+
+
+
+
+ java.util.List<org.springframework.validation.FieldError> getErrors ()
+
+
+
+
+
+
+
+ java.util.List<java.lang.String> getLabelKeys ()
+
+
+
+
+
+
+
+ java.util.List<java.lang.Class> getPropertyTypeSuperclasses ()
+
+
+
+
+
+
+
+ java.lang.Object getRootBean ()
+
+
+
+
+
+
+
+ java.lang.Class getRootBeanType ()
+
+
+
+
+
+
+
+ java.lang.Object getValue ()
+
+
+
+
+
+
+
+ boolean isInvalid ()
+
+
+
+
+
+
+
+ boolean isRequired ()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/package-frame.html b/5.0.1/api/grails/plugin/formfields/package-frame.html
new file mode 100644
index 00000000..c1a9d5f8
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/package-frame.html
@@ -0,0 +1,66 @@
+
+
+
+
+ grails.plugin.formfields
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/grails/plugin/formfields/package-summary.html b/5.0.1/api/grails/plugin/formfields/package-summary.html
new file mode 100644
index 00000000..d873507f
--- /dev/null
+++ b/5.0.1/api/grails/plugin/formfields/package-summary.html
@@ -0,0 +1,242 @@
+
+
+
+
+
+grails.plugin.formfields (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
+
diff --git a/5.0.1/api/groovy.ico b/5.0.1/api/groovy.ico
new file mode 100644
index 00000000..9e9b8d81
Binary files /dev/null and b/5.0.1/api/groovy.ico differ
diff --git a/5.0.1/api/help-doc.html b/5.0.1/api/help-doc.html
new file mode 100644
index 00000000..6c44fb72
--- /dev/null
+++ b/5.0.1/api/help-doc.html
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+ API Help (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+ Overview
+ The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
+
+
+ Package
+ Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain six categories:
+
+ Interfaces (italic)
+ Classes
+ Enums
+ Exceptions
+ Errors
+ Annotation Types
+
+
+
+ Class/Interface
+ Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
+
+ Class inheritance diagram
+ Direct Subclasses
+ All Known Subinterfaces
+ All Known Implementing Classes
+ Class/interface declaration
+ Class/interface description
+
+
+ Nested Class Summary
+ Field Summary
+ Constructor Summary
+ Method Summary
+
+
+ Field Detail
+ Constructor Detail
+ Method Detail
+
+ Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+
+
+ Annotation Type
+ Each annotation type has its own separate page with the following sections:
+
+ Annotation Type declaration
+ Annotation Type description
+ Required Element Summary
+ Optional Element Summary
+ Element Detail
+
+
+
+ Enum
+ Each enum has its own separate page with the following sections:
+
+ Enum declaration
+ Enum description
+ Enum Constant Summary
+ Enum Constant Detail
+
+
+
+
+ Deprecated API
+ The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+
+
+ Index
+ The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+
+
+ Frames/No Frames
+ These links show and hide the HTML frames. All pages are available with or without frames.
+
+
+ All Classes
+ The All Classes link shows all classes and interfaces except non-static nested types.
+
+
+ Serialized Form
+ Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+
+
+ Constant Field Values
+ The Constant Field Values page lists the static final fields and their values.
+
+
+
This help file applies to API documentation generated using the standard doclet.
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
diff --git a/5.0.1/api/index-all.html b/5.0.1/api/index-all.html
new file mode 100644
index 00000000..78b50aa1
--- /dev/null
+++ b/5.0.1/api/index-all.html
@@ -0,0 +1,710 @@
+
+
+
+
+
+
+
+ Index (fields "5.0.1" API)
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
A
+
+
B
+
+
C
+
+
D
+
+
E
+
+
F
+
+
G
+
+
H
+
+
I
+
+
J
+
+
K
+
+
L
+
+
M
+
+
N
+
+
O
+
+
P
+
+
Q
+
+
R
+
+
S
+
+
T
+
+
U
+
+
V
+
+
W
+
+
X
+
+
Y
+
+
Z
+
+
_
+
+
+
+
+
A
+
+
+accessorFor(java.lang.Object, java.lang.String) - Method in BeanPropertyAccessorFactory
+
+all - Property in FormFieldsTagLib
+ attr: bean REQUIRED Name of the source bean in the GSP model.
+
+Application - Class in grails.plugin.formfields
+
+Application() - Constructor in Application
+
+
+
+
+
+
B
+
+
+bean - Property in FormFieldsTagLib.BeanAndPrefix
+
+beanClass - Property in BeanPropertyAccessorImpl
+
+BeanPropertyAccessor - Interface in grails.plugin.formfields
+
+BeanPropertyAccessorFactory - Class in grails.plugin.formfields
+
+BeanPropertyAccessorFactory() - Constructor in BeanPropertyAccessorFactory
+
+beanPropertyAccessorFactory - Property in FormFieldsTagLib
+
+BeanPropertyAccessorImpl - Class in grails.plugin.formfields
+
+BeanPropertyAccessorImpl() - Constructor in BeanPropertyAccessorImpl
+
+beanType - Property in BeanPropertyAccessorImpl
+
+beanType - Property in DelegatingBeanPropertyAccessorImpl
+
+beanType - Property in PropertyPathAccessor
+
+
+
+
+
+
C
+
+
+codecLookup - Property in FormFieldsTagLib
+
+constraints - Property in BeanPropertyAccessorImpl
+
+CONSTRAINTS_EVALULATOR_BEAN_NAME - Property in FieldsGrailsPlugin
+
+constraintsEvaluator - Property in BeanPropertyAccessorFactory
+
+
+
+
+
+
D
+
+
+defaultEncodeAs - Property in FormFieldsTagLib
+
+DelegatingBeanPropertyAccessorImpl - Class in grails.plugin.formfields
+
+DelegatingBeanPropertyAccessorImpl(java.lang.Object, java.lang.Object, java.lang.Class, java.lang.String, org.grails.scaffolding.model.property.DomainProperty) - Constructor in DelegatingBeanPropertyAccessorImpl
+
+DISABLE_LOOKUP_CACHE - Field in FormFieldsTemplateService
+
+display - Property in FormFieldsTagLib
+ attr: bean Name of the source bean in the GSP model.
+
+DISPLAY_STYLE - Field in FormFieldsTagLib
+
+displayWidget - Property in FormFieldsTagLib
+ attr: bean Name of the source bean in the GSP model.
+
+domainModelService - Property in FormFieldsTagLib
+
+domainProperty - Property in BeanPropertyAccessorImpl
+
+doWithSpring() - Method in FieldsGrailsPlugin
+
+
+
+
+
+
E
+
+
+entity - Property in BeanPropertyAccessorImpl
+
+equals(java.lang.Object) - Method in DelegatingBeanPropertyAccessorImpl
+
+
+
+
+
+
F
+
+
+field - Property in FormFieldsTagLib
+ attr: bean Name of the source bean in the GSP model.
+
+fieldsDomainPropertyFactory - Property in BeanPropertyAccessorFactory
+
+fieldsDomainPropertyFactory - Property in FormFieldsTagLib
+
+FieldsGrailsPlugin - Class in grails.plugin.formfields
+
+FieldsGrailsPlugin() - Constructor in FieldsGrailsPlugin
+
+findTemplate(grails.plugin.formfields.BeanPropertyAccessor, java.lang.String, java.lang.String, java.lang.String) - Method in FormFieldsTemplateService
+
+FormFieldsTagLib - Class in grails.plugin.formfields
+
+FormFieldsTagLib.BeanAndPrefix - Class in grails.plugin.formfields
+
+FormFieldsTagLib.BeanAndPrefix() - Constructor in FormFieldsTagLib.BeanAndPrefix
+
+FormFieldsTagLib.BeanAndPrefixStack - Class in grails.plugin.formfields
+
+FormFieldsTagLib.BeanAndPrefixStack() - Constructor in FormFieldsTagLib.BeanAndPrefixStack
+
+FormFieldsTagLib() - Constructor in FormFieldsTagLib
+
+FormFieldsTemplateService - Class in grails.plugin.formfields
+
+formFieldsTemplateService - Property in FormFieldsTagLib
+
+FormFieldsTemplateService() - Constructor in FormFieldsTemplateService
+
+
+
+
+
+
G
+
+
+getBean() - Method in FormFieldsTagLib.BeanAndPrefixStack
+
+getBeanClass() - Method in BeanPropertyAccessor
+ Returns: the GORM domain type of `beanType`.
+getBeanClass() - Method in DelegatingBeanPropertyAccessorImpl
+
+getBeanClass() - Method in PropertyPathAccessor
+
+getBeanStack() - Method in FormFieldsTagLib
+
+getBeanSuperclasses() - Method in BeanPropertyAccessor
+ Returns: all superclasses and interfaces of `beanType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+getBeanSuperclasses() - Method in BeanPropertyAccessorImpl
+
+getBeanSuperclasses() - Method in DelegatingBeanPropertyAccessorImpl
+
+getBeanSuperclasses() - Method in PropertyPathAccessor
+
+getBeanType() - Method in BeanPropertyAccessor
+ 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.
+getConstraints() - Method in BeanPropertyAccessor
+ 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.
+getConstraints() - Method in DelegatingBeanPropertyAccessorImpl
+
+getConstraints() - Method in PropertyPathAccessor
+
+getDefaultLabel() - Method in BeanPropertyAccessor
+ Returns: default label text for the property at the end of the path.
+getDefaultLabel() - Method in BeanPropertyAccessorImpl
+
+getDefaultLabel() - Method in DelegatingBeanPropertyAccessorImpl
+
+getDefaultLabel() - Method in PropertyPathAccessor
+
+getDefaultNumberType(java.util.Map) - Method in FormFieldsTagLib
+
+getDomainProperty() - Method in BeanPropertyAccessor
+ 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.
+getDomainProperty() - Method in DelegatingBeanPropertyAccessorImpl
+
+getDomainProperty() - Method in PropertyPathAccessor
+
+getEntity() - Method in BeanPropertyAccessor
+ Returns: the GORM domain type of `beanType`.
+getEntity() - Method in DelegatingBeanPropertyAccessorImpl
+
+getEntity() - Method in PropertyPathAccessor
+
+getErrors() - Method in BeanPropertyAccessor
+ Returns: the resolved messages for any validation errors present on the property at the end of the path.
+getErrors() - Method in BeanPropertyAccessorImpl
+
+getErrors() - Method in DelegatingBeanPropertyAccessorImpl
+
+getErrors() - Method in PropertyPathAccessor
+
+getInnerAttributes() - Method in FormFieldsTagLib.BeanAndPrefixStack
+
+getLabelKeys() - Method in BeanPropertyAccessor
+ Returns: the i18n keys used to resolve a label for the property at the end of the path in order of preference.
+getLabelKeys() - Method in BeanPropertyAccessorImpl
+
+getLabelKeys() - Method in DelegatingBeanPropertyAccessorImpl
+
+getLabelKeys() - Method in PropertyPathAccessor
+
+getLocale() - Method in FormFieldsTagLib
+
+getNumberFormatter() - Method in FormFieldsTagLib
+
+getPathFromRoot() - Method in BeanPropertyAccessor
+ Returns: the full path from the root bean to the requested property.
+getPathFromRoot() - Method in DelegatingBeanPropertyAccessorImpl
+
+getPrefix() - Method in FormFieldsTagLib.BeanAndPrefixStack
+
+getPropertyName() - Method in BeanPropertyAccessor
+ Returns: the name of the property at the end of the path, e.g. for `address.home.street`, `street` is returned.
+getPropertyType() - Method in BeanPropertyAccessor
+ 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.
+getPropertyTypeSuperclasses() - Method in BeanPropertyAccessor
+ Returns: all superclasses and interfaces of `propertyType` excluding `Object`, `Serializable`, `Comparable` and `Cloneable`.
+getPropertyTypeSuperclasses() - Method in BeanPropertyAccessorImpl
+
+getPropertyTypeSuperclasses() - Method in DelegatingBeanPropertyAccessorImpl
+
+getPropertyTypeSuperclasses() - Method in PropertyPathAccessor
+
+getRootBean() - Method in BeanPropertyAccessor
+ Returns: the object at the root of a path expression, e.g. for a `person` bean and `address.street` then `person` is returned.
+getRootBean() - Method in DelegatingBeanPropertyAccessorImpl
+
+getRootBean() - Method in PropertyPathAccessor
+
+getRootBeanType() - Method in BeanPropertyAccessor
+ 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.
+getRootBeanType() - Method in DelegatingBeanPropertyAccessorImpl
+
+getRootBeanType() - Method in PropertyPathAccessor
+
+getTemplateFor(java.lang.String) - Method in FormFieldsTemplateService
+
+getValue() - Method in BeanPropertyAccessor
+ 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.
+getValue() - Method in DelegatingBeanPropertyAccessorImpl
+
+getValue() - Method in PropertyPathAccessor
+
+getWidget(org.grails.scaffolding.model.property.Constrained, java.lang.Class) - Method in FormFieldsTemplateService
+
+getWidgetPrefix() - Method in FormFieldsTemplateService
+
+grailsApplication - Property in BeanPropertyAccessorFactory
+
+grailsApplication - Property in BeanPropertyAccessorImpl
+
+grailsApplication - Property in FormFieldsTemplateService
+
+grailsDomainClassMappingContext - Property in BeanPropertyAccessorFactory
+
+grailsVersion - Property in FieldsGrailsPlugin
+
+groovyPageLocator - Property in FormFieldsTemplateService
+
+
+
+
+
+
H
+
+
+hashCode() - Method in DelegatingBeanPropertyAccessorImpl
+
+
+
+
+
+
I
+
+
+innerAttributes - Property in FormFieldsTagLib.BeanAndPrefix
+
+input - Property in FormFieldsTagLib
+ deprecated: since version 1.5 - Use widget instead attr: bean Name of the source bean in the GSP model.
+
+isInvalid() - Method in BeanPropertyAccessor
+ Returns: whether or not the property has any validation errors (i.e.
+isInvalid() - Method in BeanPropertyAccessorImpl
+
+isInvalid() - Method in DelegatingBeanPropertyAccessorImpl
+
+isInvalid() - Method in PropertyPathAccessor
+
+isRequired() - Method in BeanPropertyAccessor
+ Returns: whether or not the property is required as determined by constraints.
+isRequired() - Method in BeanPropertyAccessorImpl
+
+isRequired() - Method in DelegatingBeanPropertyAccessorImpl
+
+isRequired() - Method in PropertyPathAccessor
+
+
+
+
+
+
J
+
+
+
+
+
+
+
K
+
+
+
+
+
+
+
L
+
+
+loadAfter - Property in FieldsGrailsPlugin
+
+localeResolver - Property in FormFieldsTagLib
+
+localizeNumbers - Property in FormFieldsTagLib
+
+
+
+
+
+
M
+
+
+main(java.lang.String) - Method in Application
+
+mappingContexts - Property in FormFieldsTagLib
+
+messageSource - Property in FormFieldsTagLib
+
+
+
+
+
+
N
+
+
+namespace - Property in FormFieldsTagLib
+
+
+
+
+
+
O
+
+
+
+
+
+
+
P
+
+
+pathFromRoot - Property in BeanPropertyAccessorImpl
+
+pathFromRoot - Property in PropertyPathAccessor
+
+pluginManager - Property in FormFieldsTemplateService
+
+prefix - Property in FormFieldsTagLib.BeanAndPrefix
+
+propertyName - Property in BeanPropertyAccessorImpl
+
+propertyName - Property in DelegatingBeanPropertyAccessorImpl
+
+propertyName - Property in PropertyPathAccessor
+
+PropertyPathAccessor - Class in grails.plugin.formfields
+
+PropertyPathAccessor(java.lang.String) - Constructor in PropertyPathAccessor
+
+propertyType - Property in BeanPropertyAccessorImpl
+
+propertyType - Property in DelegatingBeanPropertyAccessorImpl
+
+propertyType - Property in PropertyPathAccessor
+
+proxyHandler - Property in BeanPropertyAccessorFactory
+
+
+
+
+
+
Q
+
+
+
+
+
+
+
R
+
+
+renderDateTimeInput(java.util.Map, java.util.Map) - Method in FormFieldsTagLib
+
+renderDefaultInput(grails.plugin.formfields.BeanPropertyAccessor, java.util.Map, java.util.Map) - Method in FormFieldsTagLib
+
+renderNumericInput(grails.plugin.formfields.BeanPropertyAccessor, java.util.Map, java.util.Map) - Method in FormFieldsTagLib
+
+renderStringInput(java.util.Map, java.util.Map) - Method in FormFieldsTagLib
+
+rootBean - Property in BeanPropertyAccessorImpl
+
+rootBeanType - Property in BeanPropertyAccessorImpl
+
+
+
+
+
+
S
+
+
+SETTING_WIDGET_PREFIX - Field in FormFieldsTemplateService
+
+STACK_PAGE_SCOPE_VARIABLE - Property in FormFieldsTagLib
+
+
+
+
+
+
T
+
+
+table - Property in FormFieldsTagLib
+ Renders a collection of beans in a table
+toPropertyNameFormat(java.lang.Class) - Method in FormFieldsTemplateService
+
+toString() - Method in FormFieldsTagLib.BeanAndPrefixStack
+
+
+
+
+
+
U
+
+
+
+
+
+
+
V
+
+
+value - Property in BeanPropertyAccessorImpl
+
+
+
+
+
+
W
+
+
+widget - Property in FormFieldsTagLib
+ attr: bean Name of the source bean in the GSP model.
+
+with - Property in FormFieldsTagLib
+ attr: bean REQUIRED Name of the source bean in the GSP model.
+
+
+
+
+
+
X
+
+
+
+
+
+
+
Y
+
+
+
+
+
+
+
Z
+
+
+
+
+
+
+
_
+
+
+
+
+
+
+
+
+A
+
+B
+
+C
+
+D
+
+E
+
+F
+
+G
+
+H
+
+I
+
+J
+
+K
+
+L
+
+M
+
+N
+
+O
+
+P
+
+Q
+
+R
+
+S
+
+T
+
+U
+
+V
+
+W
+
+X
+
+Y
+
+Z
+
+_
+
+
+
+
+
+
+
Groovy Documentation
+
+
+
+
+
+
diff --git a/5.0.1/api/index.html b/5.0.1/api/index.html
new file mode 100644
index 00000000..e560adeb
--- /dev/null
+++ b/5.0.1/api/index.html
@@ -0,0 +1,90 @@
+
+
+
+
+Index (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+ Frame Alert
+ This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. Link to Non-frame version .
+
+
diff --git a/5.0.1/api/inherit.gif b/5.0.1/api/inherit.gif
new file mode 100644
index 00000000..c814867a
Binary files /dev/null and b/5.0.1/api/inherit.gif differ
diff --git a/5.0.1/api/overview-frame.html b/5.0.1/api/overview-frame.html
new file mode 100644
index 00000000..d2c9b0de
--- /dev/null
+++ b/5.0.1/api/overview-frame.html
@@ -0,0 +1,45 @@
+
+
+
+
+Overview (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/overview-summary.html b/5.0.1/api/overview-summary.html
new file mode 100644
index 00000000..af86ba59
--- /dev/null
+++ b/5.0.1/api/overview-summary.html
@@ -0,0 +1,130 @@
+
+
+
+
+
+Overview (fields "5.0.1" API)
+
+
+
+
+
+
+
+
+
+ JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/5.0.1/api/package-list b/5.0.1/api/package-list
new file mode 100644
index 00000000..fa57a5ea
--- /dev/null
+++ b/5.0.1/api/package-list
@@ -0,0 +1 @@
+grails.plugin.formfields
diff --git a/5.0.1/api/stylesheet.css b/5.0.1/api/stylesheet.css
new file mode 100644
index 00000000..06eb31a1
--- /dev/null
+++ b/5.0.1/api/stylesheet.css
@@ -0,0 +1,2306 @@
+@charset "UTF-8";
+
+/*! normalize.css v2.1.0 | MIT License | git.io/normalize */
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
+ display: block
+}
+
+audio, canvas, video {
+ display: inline-block
+}
+
+audio:not([controls]) {
+ display: none;
+ height: 0
+}
+
+[hidden] {
+ display: none
+}
+
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%
+}
+
+body {
+ margin: 0
+}
+
+a:focus {
+ outline: thin dotted
+}
+
+a:active, a:hover {
+ outline: 0
+}
+
+h1 {
+ font-size: 2em;
+ margin: .67em 0
+}
+
+abbr[title] {
+ border-bottom: 1px dotted
+}
+
+b, strong {
+ font-weight: bold
+}
+
+dfn {
+ font-style: italic
+}
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0
+}
+
+mark {
+ background: #ff0;
+ color: #000
+}
+
+code, kbd, pre, samp {
+ font-family: monospace, serif;
+ font-size: 1em
+}
+
+pre {
+ white-space: pre-wrap
+}
+
+q {
+ quotes: "C" "D" "8" "9"
+}
+
+small {
+ font-size: 80%
+}
+
+sub, sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline
+}
+
+sup {
+ top: -0.5em
+}
+
+sub {
+ bottom: -0.25em
+}
+
+img {
+ border: 0
+}
+
+svg:not(:root) {
+ overflow: hidden
+}
+
+figure {
+ margin: 0
+}
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: .35em .625em .75em
+}
+
+legend {
+ border: 0;
+ padding: 0
+}
+
+button, input, select, textarea {
+ font-family: inherit;
+ font-size: 100%;
+ margin: 0
+}
+
+button, input {
+ line-height: normal
+}
+
+button, select {
+ text-transform: none
+}
+
+button, html input[type="button"], input[type="reset"], input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer
+}
+
+button[disabled], html input[disabled] {
+ cursor: default
+}
+
+input[type="checkbox"], input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0
+}
+
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box;
+ box-sizing: content-box
+}
+
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none
+}
+
+button::-moz-focus-inner, input::-moz-focus-inner {
+ border: 0;
+ padding: 0
+}
+
+textarea {
+ overflow: auto;
+ vertical-align: top
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0
+}
+
+@-ms-viewport {
+ width: device-width
+}
+
+@media screen and (max-width: 400px) {
+ @-ms-viewport {
+ width: 320px
+ }
+}
+
+.hidden {
+ display: none !important;
+ visibility: hidden !important
+}
+
+.visible-xs {
+ display: none !important
+}
+
+tr.visible-xs {
+ display: none !important
+}
+
+th.visible-xs, td.visible-xs {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important
+ }
+
+ tr.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-xs, td.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-xs.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-sm, td.visible-xs.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-xs.visible-md {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-md, td.visible-xs.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-xs.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-xs.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-xs.visible-lg, td.visible-xs.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-sm {
+ display: none !important
+}
+
+tr.visible-sm {
+ display: none !important
+}
+
+th.visible-sm, td.visible-sm {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-sm.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-xs, td.visible-sm.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important
+ }
+
+ tr.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-sm, td.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-sm.visible-md {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-md, td.visible-sm.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-sm.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-sm.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-sm.visible-lg, td.visible-sm.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-md {
+ display: none !important
+}
+
+tr.visible-md {
+ display: none !important
+}
+
+th.visible-md, td.visible-md {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-md.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-md.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-xs, td.visible-md.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-md.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-md.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-sm, td.visible-md.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important
+ }
+
+ tr.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-md, td.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-md.visible-lg {
+ display: block !important
+ }
+
+ tr.visible-md.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-md.visible-lg, td.visible-md.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.visible-lg {
+ display: none !important
+}
+
+tr.visible-lg {
+ display: none !important
+}
+
+th.visible-lg, td.visible-lg {
+ display: none !important
+}
+
+@media (max-width: 767px) {
+ .visible-lg.visible-xs {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-xs {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-xs, td.visible-lg.visible-xs {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-lg.visible-sm {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-sm {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-sm, td.visible-lg.visible-sm {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-lg.visible-md {
+ display: block !important
+ }
+
+ tr.visible-lg.visible-md {
+ display: table-row !important
+ }
+
+ th.visible-lg.visible-md, td.visible-lg.visible-md {
+ display: table-cell !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important
+ }
+
+ tr.visible-lg {
+ display: table-row !important
+ }
+
+ th.visible-lg, td.visible-lg {
+ display: table-cell !important
+ }
+}
+
+.hidden-xs {
+ display: block !important
+}
+
+tr.hidden-xs {
+ display: table-row !important
+}
+
+th.hidden-xs, td.hidden-xs {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-xs, td.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-xs.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-sm, td.hidden-xs.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-xs.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-md, td.hidden-xs.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-xs.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-xs.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-xs.hidden-lg, td.hidden-xs.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-sm {
+ display: block !important
+}
+
+tr.hidden-sm {
+ display: table-row !important
+}
+
+th.hidden-sm, td.hidden-sm {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-sm.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-xs, td.hidden-sm.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-sm, td.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-sm.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-md, td.hidden-sm.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-sm.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-sm.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-sm.hidden-lg, td.hidden-sm.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-md {
+ display: block !important
+}
+
+tr.hidden-md {
+ display: table-row !important
+}
+
+th.hidden-md, td.hidden-md {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-md.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-xs, td.hidden-md.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-md.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-sm, td.hidden-md.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-md, td.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-md.hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-md.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-md.hidden-lg, td.hidden-md.hidden-lg {
+ display: none !important
+ }
+}
+
+.hidden-lg {
+ display: block !important
+}
+
+tr.hidden-lg {
+ display: table-row !important
+}
+
+th.hidden-lg, td.hidden-lg {
+ display: table-cell !important
+}
+
+@media (max-width: 767px) {
+ .hidden-lg.hidden-xs {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-xs {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-xs, td.hidden-lg.hidden-xs {
+ display: none !important
+ }
+}
+
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-lg.hidden-sm {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-sm {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-sm, td.hidden-lg.hidden-sm {
+ display: none !important
+ }
+}
+
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-lg.hidden-md {
+ display: none !important
+ }
+
+ tr.hidden-lg.hidden-md {
+ display: none !important
+ }
+
+ th.hidden-lg.hidden-md, td.hidden-lg.hidden-md {
+ display: none !important
+ }
+}
+
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important
+ }
+
+ tr.hidden-lg {
+ display: none !important
+ }
+
+ th.hidden-lg, td.hidden-lg {
+ display: none !important
+ }
+}
+
+.visible-print {
+ display: none !important
+}
+
+tr.visible-print {
+ display: none !important
+}
+
+th.visible-print, td.visible-print {
+ display: none !important
+}
+
+@media print {
+ .visible-print {
+ display: block !important
+ }
+
+ tr.visible-print {
+ display: table-row !important
+ }
+
+ th.visible-print, td.visible-print {
+ display: table-cell !important
+ }
+
+ .hidden-print {
+ display: none !important
+ }
+
+ tr.hidden-print {
+ display: none !important
+ }
+
+ th.hidden-print, td.hidden-print {
+ display: none !important
+ }
+}
+
+.container {
+ margin-right: auto;
+ margin-left: auto;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.container:before, .container:after {
+ content: " ";
+ display: table
+}
+
+.container:after {
+ clear: both
+}
+
+.row-fluid {
+ margin-left: -15px;
+ margin-right: -15px
+}
+
+.row-fluid:before, .row-fluid:after {
+ content: " ";
+ display: table
+}
+
+.row-fluid:after {
+ clear: both
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-left: 15px;
+ padding-right: 15px
+}
+
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11 {
+ float: left
+}
+
+.col-xs-1 {
+ width: 8.333333333333332%
+}
+
+.col-xs-2 {
+ width: 16.666666666666664%
+}
+
+.col-xs-3 {
+ width: 25%
+}
+
+.col-xs-4 {
+ width: 33.33333333333333%
+}
+
+.col-xs-5 {
+ width: 41.66666666666667%
+}
+
+.col-xs-6 {
+ width: 50%
+}
+
+.col-xs-7 {
+ width: 58.333333333333336%
+}
+
+.col-xs-8 {
+ width: 66.66666666666666%
+}
+
+.col-xs-9 {
+ width: 75%
+}
+
+.col-xs-10 {
+ width: 83.33333333333334%
+}
+
+.col-xs-11 {
+ width: 91.66666666666666%
+}
+
+.col-xs-12 {
+ width: 100%
+}
+
+@media (min-width: 768px) {
+ .container {
+ max-width: 750px
+ }
+
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11 {
+ float: left
+ }
+
+ .col-sm-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-sm-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-sm-3 {
+ width: 25%
+ }
+
+ .col-sm-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-sm-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-sm-6 {
+ width: 50%
+ }
+
+ .col-sm-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-sm-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-sm-9 {
+ width: 75%
+ }
+
+ .col-sm-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-sm-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-sm-12 {
+ width: 100%
+ }
+
+ .col-sm-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-sm-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-sm-push-3 {
+ left: 25%
+ }
+
+ .col-sm-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-sm-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-sm-push-6 {
+ left: 50%
+ }
+
+ .col-sm-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-sm-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-sm-push-9 {
+ left: 75%
+ }
+
+ .col-sm-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-sm-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-sm-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-sm-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-sm-pull-3 {
+ right: 25%
+ }
+
+ .col-sm-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-sm-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-sm-pull-6 {
+ right: 50%
+ }
+
+ .col-sm-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-sm-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-sm-pull-9 {
+ right: 75%
+ }
+
+ .col-sm-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-sm-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-sm-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-sm-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-sm-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-sm-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-sm-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-sm-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-sm-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-sm-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-sm-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-sm-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-sm-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+@media (min-width: 992px) {
+ .container {
+ max-width: 970px
+ }
+
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11 {
+ float: left
+ }
+
+ .col-md-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-md-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-md-3 {
+ width: 25%
+ }
+
+ .col-md-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-md-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-md-6 {
+ width: 50%
+ }
+
+ .col-md-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-md-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-md-9 {
+ width: 75%
+ }
+
+ .col-md-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-md-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-md-12 {
+ width: 100%
+ }
+
+ .col-md-push-0 {
+ left: auto
+ }
+
+ .col-md-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-md-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-md-push-3 {
+ left: 25%
+ }
+
+ .col-md-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-md-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-md-push-6 {
+ left: 50%
+ }
+
+ .col-md-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-md-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-md-push-9 {
+ left: 75%
+ }
+
+ .col-md-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-md-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-md-pull-0 {
+ right: auto
+ }
+
+ .col-md-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-md-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-md-pull-3 {
+ right: 25%
+ }
+
+ .col-md-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-md-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-md-pull-6 {
+ right: 50%
+ }
+
+ .col-md-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-md-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-md-pull-9 {
+ right: 75%
+ }
+
+ .col-md-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-md-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-md-offset-0 {
+ margin-left: 0
+ }
+
+ .col-md-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-md-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-md-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-md-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-md-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-md-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-md-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-md-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-md-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-md-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-md-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+@media (min-width: 1200px) {
+ .container {
+ max-width: 1170px
+ }
+
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11 {
+ float: left
+ }
+
+ .col-lg-1 {
+ width: 8.333333333333332%
+ }
+
+ .col-lg-2 {
+ width: 16.666666666666664%
+ }
+
+ .col-lg-3 {
+ width: 25%
+ }
+
+ .col-lg-4 {
+ width: 33.33333333333333%
+ }
+
+ .col-lg-5 {
+ width: 41.66666666666667%
+ }
+
+ .col-lg-6 {
+ width: 50%
+ }
+
+ .col-lg-7 {
+ width: 58.333333333333336%
+ }
+
+ .col-lg-8 {
+ width: 66.66666666666666%
+ }
+
+ .col-lg-9 {
+ width: 75%
+ }
+
+ .col-lg-10 {
+ width: 83.33333333333334%
+ }
+
+ .col-lg-11 {
+ width: 91.66666666666666%
+ }
+
+ .col-lg-12 {
+ width: 100%
+ }
+
+ .col-lg-push-0 {
+ left: auto
+ }
+
+ .col-lg-push-1 {
+ left: 8.333333333333332%
+ }
+
+ .col-lg-push-2 {
+ left: 16.666666666666664%
+ }
+
+ .col-lg-push-3 {
+ left: 25%
+ }
+
+ .col-lg-push-4 {
+ left: 33.33333333333333%
+ }
+
+ .col-lg-push-5 {
+ left: 41.66666666666667%
+ }
+
+ .col-lg-push-6 {
+ left: 50%
+ }
+
+ .col-lg-push-7 {
+ left: 58.333333333333336%
+ }
+
+ .col-lg-push-8 {
+ left: 66.66666666666666%
+ }
+
+ .col-lg-push-9 {
+ left: 75%
+ }
+
+ .col-lg-push-10 {
+ left: 83.33333333333334%
+ }
+
+ .col-lg-push-11 {
+ left: 91.66666666666666%
+ }
+
+ .col-lg-pull-0 {
+ right: auto
+ }
+
+ .col-lg-pull-1 {
+ right: 8.333333333333332%
+ }
+
+ .col-lg-pull-2 {
+ right: 16.666666666666664%
+ }
+
+ .col-lg-pull-3 {
+ right: 25%
+ }
+
+ .col-lg-pull-4 {
+ right: 33.33333333333333%
+ }
+
+ .col-lg-pull-5 {
+ right: 41.66666666666667%
+ }
+
+ .col-lg-pull-6 {
+ right: 50%
+ }
+
+ .col-lg-pull-7 {
+ right: 58.333333333333336%
+ }
+
+ .col-lg-pull-8 {
+ right: 66.66666666666666%
+ }
+
+ .col-lg-pull-9 {
+ right: 75%
+ }
+
+ .col-lg-pull-10 {
+ right: 83.33333333333334%
+ }
+
+ .col-lg-pull-11 {
+ right: 91.66666666666666%
+ }
+
+ .col-lg-offset-0 {
+ margin-left: 0
+ }
+
+ .col-lg-offset-1 {
+ margin-left: 8.333333333333332%
+ }
+
+ .col-lg-offset-2 {
+ margin-left: 16.666666666666664%
+ }
+
+ .col-lg-offset-3 {
+ margin-left: 25%
+ }
+
+ .col-lg-offset-4 {
+ margin-left: 33.33333333333333%
+ }
+
+ .col-lg-offset-5 {
+ margin-left: 41.66666666666667%
+ }
+
+ .col-lg-offset-6 {
+ margin-left: 50%
+ }
+
+ .col-lg-offset-7 {
+ margin-left: 58.333333333333336%
+ }
+
+ .col-lg-offset-8 {
+ margin-left: 66.66666666666666%
+ }
+
+ .col-lg-offset-9 {
+ margin-left: 75%
+ }
+
+ .col-lg-offset-10 {
+ margin-left: 83.33333333333334%
+ }
+
+ .col-lg-offset-11 {
+ margin-left: 91.66666666666666%
+ }
+}
+
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.428571429;
+ text-align: center;
+ vertical-align: middle;
+ cursor: pointer;
+ border: 1px solid transparent;
+ border-radius: 0;
+ white-space: nowrap;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ -o-user-select: none;
+ user-select: none
+}
+
+.btn:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px
+}
+
+.btn:hover, .btn:focus {
+ color: #333;
+ text-decoration: none
+}
+
+.btn:active, .btn.active {
+ outline: 0;
+ background-image: none
+}
+
+.btn.disabled, .btn[disabled], fieldset[disabled] .btn {
+ cursor: not-allowed;
+ pointer-events: none;
+ opacity: .65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad
+}
+
+.btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
+ background-image: none
+}
+
+.btn-default.disabled, .btn-default[disabled], fieldset[disabled] .btn-default, .btn-default.disabled:hover, .btn-default[disabled]:hover, fieldset[disabled] .btn-default:hover, .btn-default.disabled:focus, .btn-default[disabled]:focus, fieldset[disabled] .btn-default:focus, .btn-default.disabled:active, .btn-default[disabled]:active, fieldset[disabled] .btn-default:active, .btn-default.disabled.active, .btn-default[disabled].active, fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc
+}
+
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e
+}
+
+.btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary {
+ background-image: none
+}
+
+.btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd
+}
+
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512
+}
+
+.btn-warning:active, .btn-warning.active, .open .dropdown-toggle.btn-warning {
+ background-image: none
+}
+
+.btn-warning.disabled, .btn-warning[disabled], fieldset[disabled] .btn-warning, .btn-warning.disabled:hover, .btn-warning[disabled]:hover, fieldset[disabled] .btn-warning:hover, .btn-warning.disabled:focus, .btn-warning[disabled]:focus, fieldset[disabled] .btn-warning:focus, .btn-warning.disabled:active, .btn-warning[disabled]:active, fieldset[disabled] .btn-warning:active, .btn-warning.disabled.active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236
+}
+
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925
+}
+
+.btn-danger:active, .btn-danger.active, .open .dropdown-toggle.btn-danger {
+ background-image: none
+}
+
+.btn-danger.disabled, .btn-danger[disabled], fieldset[disabled] .btn-danger, .btn-danger.disabled:hover, .btn-danger[disabled]:hover, fieldset[disabled] .btn-danger:hover, .btn-danger.disabled:focus, .btn-danger[disabled]:focus, fieldset[disabled] .btn-danger:focus, .btn-danger.disabled:active, .btn-danger[disabled]:active, fieldset[disabled] .btn-danger:active, .btn-danger.disabled.active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a
+}
+
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439
+}
+
+.btn-success:active, .btn-success.active, .open .dropdown-toggle.btn-success {
+ background-image: none
+}
+
+.btn-success.disabled, .btn-success[disabled], fieldset[disabled] .btn-success, .btn-success.disabled:hover, .btn-success[disabled]:hover, fieldset[disabled] .btn-success:hover, .btn-success.disabled:focus, .btn-success[disabled]:focus, fieldset[disabled] .btn-success:focus, .btn-success.disabled:active, .btn-success[disabled]:active, fieldset[disabled] .btn-success:active, .btn-success.disabled.active, .btn-success[disabled].active, fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c
+}
+
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc
+}
+
+.btn-info:active, .btn-info.active, .open .dropdown-toggle.btn-info {
+ background-image: none
+}
+
+.btn-info.disabled, .btn-info[disabled], fieldset[disabled] .btn-info, .btn-info.disabled:hover, .btn-info[disabled]:hover, fieldset[disabled] .btn-info:hover, .btn-info.disabled:focus, .btn-info[disabled]:focus, fieldset[disabled] .btn-info:focus, .btn-info.disabled:active, .btn-info[disabled]:active, fieldset[disabled] .btn-info:active, .btn-info.disabled.active, .btn-info[disabled].active, fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da
+}
+
+.btn-link {
+ color: #428bca;
+ font-weight: normal;
+ cursor: pointer;
+ border-radius: 0
+}
+
+.btn-link, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none
+}
+
+.btn-link, .btn-link:hover, .btn-link:focus, .btn-link:active {
+ border-color: transparent
+}
+
+.btn-link:hover, .btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent
+}
+
+.btn-link[disabled]:hover, fieldset[disabled] .btn-link:hover, .btn-link[disabled]:focus, fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none
+}
+
+.btn-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-sm, .btn-xs {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-xs {
+ padding: 1px 5px
+}
+
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-left: 0;
+ padding-right: 0
+}
+
+.btn-block + .btn-block {
+ margin-top: 5px
+}
+
+input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
+ width: 100%
+}
+
+.btn-default .caret {
+ border-top-color: #333
+}
+
+.btn-primary .caret, .btn-success .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret {
+ border-top-color: #fff
+}
+
+.dropup .btn-default .caret {
+ border-bottom-color: #333
+}
+
+.dropup .btn-primary .caret, .dropup .btn-success .caret, .dropup .btn-warning .caret, .dropup .btn-danger .caret, .dropup .btn-info .caret {
+ border-bottom-color: #fff
+}
+
+.btn-group, .btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle
+}
+
+.btn-group > .btn, .btn-group-vertical > .btn {
+ position: relative;
+ float: left
+}
+
+.btn-group > .btn:hover, .btn-group-vertical > .btn:hover, .btn-group > .btn:focus, .btn-group-vertical > .btn:focus, .btn-group > .btn:active, .btn-group-vertical > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn.active {
+ z-index: 2
+}
+
+.btn-group > .btn:focus, .btn-group-vertical > .btn:focus {
+ outline: 0
+}
+
+.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group {
+ margin-left: -1px
+}
+
+.btn-toolbar:before, .btn-toolbar:after {
+ content: " ";
+ display: table
+}
+
+.btn-toolbar:after {
+ clear: both
+}
+
+.btn-toolbar .btn-group {
+ float: left
+}
+
+.btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group, .btn-toolbar > .btn-group + .btn-group {
+ margin-left: 5px
+}
+
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0
+}
+
+.btn-group > .btn:first-child {
+ margin-left: 0
+}
+
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group > .btn-group {
+ float: left
+}
+
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group > .btn-group:first-child > .btn:last-child, .btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0
+}
+
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0
+}
+
+.btn-group-xs > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+ padding: 1px 5px
+}
+
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px
+}
+
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px
+}
+
+.btn-group > .btn + .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px
+}
+
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-left: 12px;
+ padding-right: 12px
+}
+
+.btn-group.open .dropdown-toggle {
+ background: #f2f2f2
+}
+
+.btn .caret {
+ margin-left: 0
+}
+
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0
+}
+
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px
+}
+
+.btn-group-vertical > .btn, .btn-group-vertical > .btn-group {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%
+}
+
+.btn-group-vertical > .btn-group:before, .btn-group-vertical > .btn-group:after {
+ content: " ";
+ display: table
+}
+
+.btn-group-vertical > .btn-group:after {
+ clear: both
+}
+
+.btn-group-vertical > .btn-group > .btn {
+ float: none
+}
+
+.btn-group-vertical > .btn + .btn, .btn-group-vertical > .btn + .btn-group, .btn-group-vertical > .btn-group + .btn, .btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0
+}
+
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0
+}
+
+.btn-group-vertical > .btn-group:first-child > .btn:last-child, .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0
+}
+
+.btn-group-vertical > .btn-group:last-child > .btn:first-child {
+ border-top-right-radius: 0;
+ border-top-left-radius: 0
+}
+
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate
+}
+
+.btn-group-justified .btn {
+ float: none;
+ display: table-cell;
+ width: 1%
+}
+
+[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none
+}
+
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid #000;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+ border-bottom: 0 dotted;
+ content: ""
+}
+
+.dropdown {
+ position: relative
+}
+
+.dropdown-toggle:focus {
+ outline: 0
+}
+
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ font-size: 14px;
+ background-color: #fff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 0;
+ background-clip: padding-box
+}
+
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto
+}
+
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5
+}
+
+.dropdown-menu > li > a {
+ font-size: 14px;
+ text-decoration: none;
+ display: block;
+ padding: 5px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.428571429;
+ color: #333;
+ white-space: nowrap
+}
+
+.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus {
+ text-decoration: none;
+ color: #fff;
+ background-color: #428bca
+}
+
+.dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #428bca
+}
+
+.dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ color: #999
+}
+
+.dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
+ cursor: not-allowed
+}
+
+.open > .dropdown-menu {
+ display: block
+}
+
+.open > a {
+ outline: 0
+}
+
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.428571429;
+ color: #999
+}
+
+.dropdown-backdrop {
+ position: fixed;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ z-index: 990
+}
+
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto
+}
+
+.dropup .caret, .navbar-fixed-bottom .dropdown .caret {
+ border-top: 0 dotted;
+ border-bottom: 4px solid #000;
+ content: ""
+}
+
+.dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px
+}
+
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto
+ }
+}
+
+body, html {
+ font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ margin: 0;
+ background: #ededed;
+ color: #343437;
+ line-height: 2em;
+ font-weight: 300;
+ font-size: .95em
+}
+
+h1 {
+ font-size: 2.5em;
+ margin: .8em 0
+}
+
+body.center {
+ padding: 0 30px;
+ background: #FFF;
+ font-size: 1em
+}
+
+ul li {
+ list-style-type: disc
+}
+
+a {
+ color: #4290ad;
+ text-decoration: none;
+ font-weight: normal
+}
+
+a:hover {
+ text-decoration: underline
+}
+
+h1, h2, h3 {
+ font-weight: 300;
+ line-height: 1.2em
+}
+
+.topNav, .bottomNav {
+ background: #f2f2f2;
+ margin: 0 -30px;
+ margin-bottom: 20px
+}
+
+.topNav:before, .bottomNav:before, .topNav:after, .bottomNav:after {
+ content: " ";
+ display: table
+}
+
+.topNav:after, .bottomNav:after {
+ clear: both
+}
+
+.topNav ul.navList, .bottomNav ul.navList {
+ padding: 10px 20px;
+ margin: 0;
+ list-style-type: none
+}
+
+.topNav ul.navList li, .bottomNav ul.navList li {
+ display: inline;
+ padding: 0 10px
+}
+
+.topNav ul.navList li.navBarCell1Rev, .bottomNav ul.navList li.navBarCell1Rev {
+ font-weight: bold
+}
+
+.bottomNav {
+ margin-top: 30px;
+ margin-bottom: 0
+}
+
+.aboutLanguage {
+ color: #BBB;
+ background: white;
+ text-align: center;
+ padding: 20px 0
+}
+
+.subNav {
+ padding-bottom: 10px;
+ margin-bottom: 10px;
+ border-bottom: 1px solid #EEE
+}
+
+.subNav:before, .subNav:after {
+ content: " ";
+ display: table
+}
+
+.subNav:after {
+ clear: both
+}
+
+.subNav div:before, .subNav div:after {
+ content: " ";
+ display: table
+}
+
+.subNav div:after {
+ clear: both
+}
+
+.subNav ul.navList, .subNav ul {
+ font-size: .9em;
+ margin: 0;
+ padding: 00;
+ float: left;
+ list-style-type: none
+}
+
+.subNav ul.navList li, .subNav ul li {
+ padding: 0 5px;
+ display: inline
+}
+
+table.overviewSummary, .contentContainer ul li table {
+ width: 100%;
+ margin: 20px 0
+}
+
+table.overviewSummary caption, .contentContainer ul li table caption {
+ text-align: left;
+ font-weight: 100;
+ font-size: 1em;
+ float: left;
+ padding: 0 10px;
+ margin-top: 10px;
+ background: #db4800;
+ color: white
+}
+
+table.overviewSummary tr th, .contentContainer ul li table tr th {
+ padding: 10px;
+ font-weight: bold;
+ font-size: 1em;
+ text-align: left
+}
+
+table.overviewSummary tr td, .contentContainer ul li table tr td {
+ vertical-align: top;
+ font-size: .9em;
+ padding: 5px 10px;
+ border-top: 1px solid #EEE
+}
+
+table.overviewSummary tbody > tr:nth-child(odd) > td, .contentContainer ul li table tbody > tr:nth-child(odd) > td {
+ background-color: #f9f9f9
+}
+
+body.left {
+ padding-top: 10px
+}
+
+body.left h1, body.left h2 {
+ display: inline;
+ text-align: left;
+ font-weight: 100;
+ font-size: 1em;
+ margin: 0 10px;
+ padding: 3px 10px;
+ margin-top: 10px;
+ background: #db4800;
+ color: white;
+ line-height: 40px
+}
+
+body.left .indexHeader {
+ margin: 0;
+ padding: 0 15px;
+ font-size: .9em
+}
+
+body.left ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0
+}
+
+body.left ul li {
+ margin: 0;
+ padding: 0
+}
+
+body.left ul li a {
+ display: block;
+ padding: 0 15px;
+ text-decoration: none
+}
+
+body.left ul li a:hover {
+ text-decoration: underline
+}
+
+.contentContainer .header ul, .contentContainer ul.blockList {
+ padding: 0
+}
+
+.contentContainer .header ul > li, .contentContainer ul.blockList > li {
+ list-style-type: none
+}
+
+.contentContainer ul.inheritance {
+ margin-left: 0;
+ padding-left: 0
+}
+
+.contentContainer ul.inheritance li {
+ list-style-type: none
+}
+
+.contentContainer ul.inheritance ul.inheritance {
+ padding-left: 20px
+}
+
+.contentContainer hr {
+ border: 0 none;
+ border-top: 1px solid #EEE;
+ margin-top: 30px;
+ margin-botom: 0
+}
+
+ul.blockList ul.blockList, ul.blockList ul.blockListLast {
+ border: 1px solid #EEE;
+ margin: 20px 0;
+ padding: 0 20px
+}
+
+ul.blockList ul.blockList h4, ul.blockList ul.blockListLast h4, ul.blockList ul.blockList h3, ul.blockList ul.blockListLast h3 {
+ font-size: 1em;
+ font-weight: bold;
+ line-height: 2em;
+ text-indent: 10px;
+ border-bottom: 1px solid #EEE;
+ margin: 0 -20px;
+ padding: 5px 0;
+ background: #f2f2f2
+}
+
+ul.blockList ul.blockList li, ul.blockList ul.blockListLast li {
+ list-style-type: none
+}
+
+ul.horizontal {
+ list-style-type: none;
+ padding: 0;
+ margin: 0;
+ font-size: .9em
+}
+
+ul.horizontal li {
+ display: inline
+}
+
+span.strong {
+ font-weight: bold
+}
+
+a span.strong {
+ font-weight: normal
+}
\ No newline at end of file
diff --git a/5.0.1/index.html b/5.0.1/index.html
new file mode 100644
index 00000000..92244d93
--- /dev/null
+++ b/5.0.1/index.html
@@ -0,0 +1,2962 @@
+
+
+
+
+
+
+
+Fields Plugin
+
+
+
+
+
+
+
+
+
Introduction
+
+
+
The Fields plugin allows you to customize the rendering of input fields for properties of domain objects, command beans and POGOs based on their type, name, etc. The plugin aims to:
+
+
+
+
+Use good defaults for fields.
+
+
+Make it very easy to override the field rendering for particular properties or property types without having to replace entire form templates.
+
+
+Not require you to copy and paste markup for containers, labels and error messages just because you need a different input type.
+
+
+Support inputs for property paths of arbitrary depth and with indexing.
+
+
+Enable other plugins to provide field rendering for special property types that gets picked up automatically (e.g. the Joda Time plugin can provide templates for the various date/time types).
+
+
+Support embedded properties of GORM domain classes.
+
+
+
+
+
+
+
+
Installation
+
+
+
The plugin is available on Maven Central and should be a dependency like this:
+
+
+
+
dependencies {
+ implementation 'io.github.gpc:fields:"5.0.1"'
+}
+
+
+
+
+
+
Usage
+
+
+
The plugin provides a set of tags you can use to render the fields in a form.
+
+
+
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):
+
+
+
+
<g :form… >
+ <f :all bean=" person " />
+</ g:form>
+
+
+
+
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>
+
+
+
+
The f:field
tag will automatically handle embedded domain properties recursively:
+
+
+
+
<f :field bean=" person " property=" address " />
+
+
+
+
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>
+
+
+
+
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>
+
+
+
+
+
+
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.
+
+
+
+
Breaking changes
+
+
+
+
Templates
+
+
The names of the templates were changed for more adequate ones:
+
+
+
+
To use the old names (for backwards compatibility), configure the following in Config.groovy
+
+
+
+
grails.plugin.fields.wrapper = " field "
+grails.plugin.fields.displayWrapper = " display "
+grails.plugin.fields.widget = " input "
+
+
+
+
+
+
+
To pass additional attributes to widgets, prefix them with widget- .
+
+
+
+
+
<f :field property=" birthDate " widget-format=" dd/MM/yyyy " />
+
+
+
+
To use the old prefix (for backwards compatibility), configure the following in Config.groovy
:
+
+
+
+
grails.plugin.fields.widgetPrefix = " input- "
+
+
+
+
+
+
+
+
+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).
+
+
+
+
+
+
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
:
+
+
+
+
grails.plugin.fields.localizeNumbers = false
+
+
+
+
+
+
+
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
.
+
+
+
+
+
+
+
+
+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
+
+
+
+
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:
+
+
+
+
+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:
+
+
+Table 2. Referenced Variables
+
+
+
+
+
+
+Name
+Description
+
+
+
+
+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.
+
+
+
+
Locating Templates Conventionally Example
+
+
Imagine an object of class Employee
that extends the class Person
and has a String name
property.
+
+
+
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.
+
+
+
+
See Template Seach Path
+
+
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'])
+
+
+
+
The can disable the caching in application.yml using:
+
+
+
+
grails:
+ plugin:
+ fields:
+ disableLookupCache: true
+
+
+
+
+
+
+
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
+
+
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
+
+
+
+
+
+
+
+Name
+Type
+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.
+
+
+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
.
+
+
+
+
+
+
+
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"
.
+
+
+
+
+
+
Locating Field Templates Directly
+
+
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:
+
+
+
+
+
+
<f :field property=" startDate " templates=" bootstrap3 " />
+
+
+
+
+
+
<f :field property=" startDate " wrapper=" bootstrap3 " widget=" bootstrap3 " />
+
+
+
+
if theme is specified, theme will be searched first to find the templates
+For example
+
+
+
+
<f :field property=" startDate " templates=" custom " theme=" bs-horizontal " />
+
+
+
+
Will search the templates first in \_fields/_themes/bs-horizontal/custom and then \_fields/custom
+
+
+
If a direct location is specified, and the templates cannot be found therein, the plugin will fall back to locating templates
+by convention.
+
+
+
+
Locating Templates Directly Example
+
+
+
+<f :field property=" startDate " wrapper=" custom " theme=" bs-horizontal " />
+
+
+<f :field property=" startDate " wrapper=" bootstrap3 " />
+
+
+<f :field property=" startDate " widget=" time " />
+
+
+<f :field property=" startDate " templates=" time " />
+
+
+<f :display property=" startDate " wrapper=" custom " theme=" bs-horizontal " />
+
+
+
+<f :display property=" startDate " wrapper=" bootstrap3 " />
+
+
+<f :display property=" startDate " widget=" time " />
+
+
+<f :display property=" startDate " templates=" time " />
+
+
+
+
+
+
+
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:
+
+
+
+
<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>
+
+
+
+
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.
+
+
+
+
+
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.
+
+
+
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 .
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
+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.
+
+
+
+
+
+
+
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).
+
+
+
+
+
+
+
+
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
+
+
+
+
+
application.yml
+
+
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.
+
+
+
+
+
Reference
+
+
+
+
+
+
+
+
+
f:all
+
+
Purpose
+
+
Renders fields for all properties of an object by using f:field
for each property.
+
+
+
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 5. Attributes for f:all
+
+
+
+
+
+
+
+Name
+Required
+Description
+
+
+
+
+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.
+
+
+except
+N/A
+A comma-separated list of properties that should be skipped (in addition to the defaults).
+
+
+order
+N/A
+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.
+
+
+
+
+
+
+
+
You can pass extra attributes to the all tag that will be propagated to the inner fields.
+
+
+
+
Example
+
+
+
<f :all bean=" person " wrapper=" someWrapper " />
+
+
+
+
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)
+
+
+
+
+
+
+
+
+
+
+
+
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 " />
+
+
+<f :display bean=" person " property=" name " theme=" purecss " />
+
+
+<f :display bean=" person " property=" name " wrapper=" bootstrap3 " />
+
+
+<f :display bean=" person " property=" name " widget=" maskedInput " />
+
+
+<f :display bean=" person " property=" name " templates=" maskedInput " />
+
+<f :display bean=" person " property=" dateOfBirth " >
+ <g :formatDate format=" dd MMM yyyy " date=" ${ value} " />
+</ f:display>
+
+
+
+
+
Attributes
+
+Table 6. Attributes for f:display
+
+
+
+
+
+
+
+Name
+Required
+Description
+
+
+
+
+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.
+
+
+default
+No
+A default value for the property that will be used if the actual property value is false
.
+
+
+label
+No
+Overrides the field label passed to the template. This value may either be an i18n key or a literal string.
+
+
+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.
+
+
+except
+No
+A comma-separated list of properties that should be skipped.
+
+
+order
+No
+A comma-separated list of properties which represents the order in which the tag should display them.
+
+
+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.
+
+
+
+
+
Any additional attributes are passed to the rendered template.
+
+
+
+
+
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
+
+
+
+
+
+
+
+
+
+
Purpose
+
+
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
.
+
+
+
+
+
+
+
Attributes
+
+
f:displayWidget
accepts exactly the same attributes as the f:display tag (except for wrapper
and templates
attributes).
+
+
+
+
+
+
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
+
+
<%@ 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()))}
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
By default the f:field
tag will output:
+
+
+
+
<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 " />
+
+
+
+
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=" 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"/>
+
+
+
+
+
+<f :field bean=" person " property=" name " wrapper=" bootstrap3 " />
+
+
+<f :field bean=" person " property=" name " widget=" maskedInput " />
+
+
+<f :field bean=" person " property=" name " templates=" maskedInput " />
+
+
+
+
+
The f:field
tag handles embedded domain properties in a special way. See Embedded Properties for details.
+
+
+
+
Attributes
+
+Table 7. Attributes for f:field
+
+
+
+
+
+
+
+Name
+Required
+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
+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
).
+
+
+theme
+String
+Theme to use if available.
+
+
+
+
+
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.
+
+
+
+
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:
+
+
+
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>
+
+
+
+
+
+
+
+
+
+
+
+
Deprecated since version 1.5
+
+
+
+
+
+
+
+
+
f:table
+
+
Purpose
+
+
<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.
+
+
+
+
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 " />
+
+
+<f :table collection=" personList " maxProperties=" 3 " />
+
+
+<f :table collection=" personList " except=" []] " />
+
+
+
+
The template for <f:table/>
should be in
+
+
+
+
grails-app/views/templates/_fields/_table.gsp
+
+
+
+
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.
+
+
+
+
<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" />
+
+
+
+
When theme is specified, the \_display template will be searched first in theme , but the theme property does not directly apply to table.
+
+
+
+
Attributes
+
+
+
+
+
+
+
+
+
+Name
+Required?
+Default
+Description
+
+
+
+
+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.
+
+
+
+
+
Modifying the _table.gsp
template.
+
+
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
+
+
+
Model in the template
+
+
The following model is passed to the _table.gsp
template:
+
+
+
+
+
+
+
+
+Name
+Content
+
+
+
+
+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
+
+
+
+
+
+
+
+
+
+
+
+Name
+Content
+
+
+
+
+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
+
+
+
+
+
(This is a simplified version of a wrapper
model)
+
+
+
+
+
+
+
+
+
+
+
+
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.
+
+
+
+
+
+
+
+
+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).
+
+
+
+
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
.
+
+
+
In a few cases it is possible to control which default widget to use, by specifying it in the beans constraints
.
+
+
+
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:
+
+
+
+
+
+
+
+
+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:
+
+
+
+
+
+
+
+
+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.
+
+
+
This behavior can be turned off in the configuration by setting:
+
+
+
+
grails:
+ plugin:
+ fields:
+ localizeNumbers: false
+
+
+
+
+
+
Boolean
+
+
Renders a <g:checkBox/>
+
+
+
+
URL
+
+
Renders a <g:field type="url"/>
+
+
+
+
Enum
+
+
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.
+
+
+
+
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"/>
+
+
+
+
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.
+
+
+
For the manyToMany
association, the multiple
attribute is set.
+
+
+
oneToOne and `manyToOne
renders a
+
+
+
+
oneToMany association
+
+
The oneToMany
association does not render an input type field, but does instead render a list of links to the associated objects.
+
+
+
+
+
+
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
+
+
<g:textField name="${property}" value="${value}" required="${required}" class="form-control"/>
+
+
+
+
+
+
+
+
+
+
f:with
+
+
Purpose
+
+
Places a bean in scope so that the bean attribute can be omitted on contained tags.
+
+
+
+
Example
+
+
+
<f :with bean=" person " >
+ <f :field property=" name " />
+ <f :field property=" address.city " />
+</ f:with>
+
+
+
+
+
Attributes
+
+
+
+
+
+
+
+
+Name
+Required?
+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.
+
+
+
+
+
+
+
+
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>
+
+
+
+
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>
+
+
+
+
+
+
+
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)
+
+
+
+
+
+
+
+
+
+
+
Changelog
+
+
+
Version 5.0.0 - Grails 5.3.x
+
+
In your build.gradle
file, use:
+
+
+
+
implementation ' io.github.gpc:fields:5.0.0 '
+
+
+
+
+
+
Version 4.0.0 - Grails 4.1.x
+
+
+
+
In your build.gradle
file, use:
+
+
+
+
compile ' io.github.gpc:fields:4.0.0 '
+
+
+
+
+
Thank goes to the community for all the contributions!
+
+
+
+
Version 3.0.0.RC1 - Grails 4.0.x
+
+
Last version that is on the "old" group org.grails.plugins
+
+
+
+
+
Version 2.2.9.BUILD-SNAPSHOT
+
+
+
+
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
+
+
+
+
+
+
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 )
+
+
+
+
+
+
+
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)
+
+
+
+
+
+
+
+
+
Version 2.2.1
+
+
+
+Bug-fix: Autowire beans
+
+
+
+
+
+
+
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.0
+
+
+
+Redesign for Grails 3.0
+
+
+
+
+
+
+
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)
+
+
+
+
+
+
+
+
+
+
Version 1.0.4
+
+
2012-02-13 : Bugfix release.
+
+
+
+
+
Version 1.0.3
+
+
2012-02-09 : Bugfix release.
+
+
+
+
+
Version 1.0.2
+
+
2012-02-07 : Bugfix release.
+
+
+
+
+
Version 1.0.1
+
+
2012-02-03 : Bugfix release.
+
+
+
+
+
Version 1
+
+
2012-02-01 : Initial release.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/5.0.x/api/deprecated-list.html b/5.0.x/api/deprecated-list.html
index 359f38a1..77e7b701 100644
--- a/5.0.x/api/deprecated-list.html
+++ b/5.0.x/api/deprecated-list.html
@@ -24,7 +24,7 @@
- Deprecated API (fields "5.0.0" API)
+ Deprecated API (fields "5.0.1" API)
@@ -34,7 +34,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/Application.html b/5.0.x/api/grails/plugin/formfields/Application.html
index 56799eb8..bd3f597c 100644
--- a/5.0.x/api/grails/plugin/formfields/Application.html
+++ b/5.0.x/api/grails/plugin/formfields/Application.html
@@ -27,7 +27,7 @@
- Application (fields "5.0.0" API)
+ Application (fields "5.0.1" API)
@@ -37,7 +37,7 @@
@@ -209,7 +209,7 @@ Inherited Methods Summary
class grails.boot.config.GrailsAutoConfiguration
- grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#onShutdown(java.util.Map), 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#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#packageNames(), grails.boot.config.GrailsAutoConfiguration#getMetaClass(), grails.boot.config.GrailsAutoConfiguration#setMetaClass(groovy.lang.MetaClass), 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#invokeMethod(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String)
+ grails.boot.config.GrailsAutoConfiguration#setApplicationContext(org.springframework.context.ApplicationContext), grails.boot.config.GrailsAutoConfiguration#grailsApplicationPostProcessor(), grails.boot.config.GrailsAutoConfiguration#doWithDynamicMethods(), grails.boot.config.GrailsAutoConfiguration#doWithApplicationContext(), grails.boot.config.GrailsAutoConfiguration#getConfig(), grails.boot.config.GrailsAutoConfiguration#getApplicationContext(), grails.boot.config.GrailsAutoConfiguration#onStartup(java.util.Map), grails.boot.config.GrailsAutoConfiguration#doWithSpring(), grails.boot.config.GrailsAutoConfiguration#getGrailsApplication(), grails.boot.config.GrailsAutoConfiguration#onConfigChange(java.util.Map), grails.boot.config.GrailsAutoConfiguration#packageNames(), 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#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#invokeMethod(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#setProperty(java.lang.String, java.lang.Object), grails.boot.config.GrailsAutoConfiguration#getProperty(java.lang.String)
diff --git a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessor.html b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessor.html
index 81f7626a..8ebc9515 100644
--- a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessor.html
+++ b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessor.html
@@ -27,7 +27,7 @@
- BeanPropertyAccessor (fields "5.0.0" API)
+ BeanPropertyAccessor (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html
index e205097d..536798f3 100644
--- a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html
+++ b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorFactory.html
@@ -27,7 +27,7 @@
- BeanPropertyAccessorFactory (fields "5.0.0" API)
+ BeanPropertyAccessorFactory (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html
index a06ec672..94b794f7 100644
--- a/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html
+++ b/5.0.x/api/grails/plugin/formfields/BeanPropertyAccessorImpl.html
@@ -27,7 +27,7 @@
- BeanPropertyAccessorImpl (fields "5.0.0" API)
+ BeanPropertyAccessorImpl (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html b/5.0.x/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html
index 8c174fd9..c3933c6e 100644
--- a/5.0.x/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html
+++ b/5.0.x/api/grails/plugin/formfields/DelegatingBeanPropertyAccessorImpl.html
@@ -27,7 +27,7 @@
- DelegatingBeanPropertyAccessorImpl (fields "5.0.0" API)
+ DelegatingBeanPropertyAccessorImpl (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/FieldsGrailsPlugin.html b/5.0.x/api/grails/plugin/formfields/FieldsGrailsPlugin.html
index 46f771de..13c5eccd 100644
--- a/5.0.x/api/grails/plugin/formfields/FieldsGrailsPlugin.html
+++ b/5.0.x/api/grails/plugin/formfields/FieldsGrailsPlugin.html
@@ -27,7 +27,7 @@
- FieldsGrailsPlugin (fields "5.0.0" API)
+ FieldsGrailsPlugin (fields "5.0.1" API)
@@ -37,7 +37,7 @@
@@ -238,7 +238,7 @@ Inherited Methods Summary
class grails.plugins.Plugin
- grails.plugins.Plugin#onChange(java.util.Map), 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#getConfig(), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#onShutdown(java.util.Map), 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#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#getGrailsApplication(), 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#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#invokeMethod(java.lang.String, java.lang.Object), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object), grails.plugins.Plugin#getProperty(java.lang.String)
+ grails.plugins.Plugin#onChange(java.util.Map), grails.plugins.Plugin#setGrailsApplication(grails.core.GrailsApplication), grails.plugins.Plugin#getArtefacts(), grails.plugins.Plugin#setApplicationContext(org.springframework.context.ApplicationContext), grails.plugins.Plugin#setPlugin(grails.plugins.GrailsPlugin), grails.plugins.Plugin#setPluginManager(grails.plugins.GrailsPluginManager), grails.plugins.Plugin#doWithDynamicMethods(), grails.plugins.Plugin#doWithApplicationContext(), 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#getConfig(), grails.plugins.Plugin#getApplicationContext(), grails.plugins.Plugin#onStartup(java.util.Map), grails.plugins.Plugin#beans(groovy.lang.Closure), grails.plugins.Plugin#doWithSpring(), grails.plugins.Plugin#getGrailsApplication(), grails.plugins.Plugin#onConfigChange(java.util.Map), grails.plugins.Plugin#isEnabled(), grails.plugins.Plugin#setEnabled(boolean), grails.plugins.Plugin#onShutdown(java.util.Map), grails.plugins.Plugin#getMetaClass(), grails.plugins.Plugin#setMetaClass(groovy.lang.MetaClass), grails.plugins.Plugin#getManager(), 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#invokeMethod(java.lang.String, java.lang.Object), grails.plugins.Plugin#setProperty(java.lang.String, java.lang.Object), grails.plugins.Plugin#getProperty(java.lang.String)
diff --git a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html
index 3daca08b..30319086 100644
--- a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html
+++ b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefix.html
@@ -27,7 +27,7 @@
- FormFieldsTagLib.BeanAndPrefix (fields "5.0.0" API)
+ FormFieldsTagLib.BeanAndPrefix (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html
index d1172e3a..9aaff1e8 100644
--- a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html
+++ b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.BeanAndPrefixStack.html
@@ -27,7 +27,7 @@
- FormFieldsTagLib.BeanAndPrefixStack (fields "5.0.0" API)
+ FormFieldsTagLib.BeanAndPrefixStack (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.html b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.html
index 9af6dc32..f6e44691 100644
--- a/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.html
+++ b/5.0.x/api/grails/plugin/formfields/FormFieldsTagLib.html
@@ -27,7 +27,7 @@
- FormFieldsTagLib (fields "5.0.0" API)
+ FormFieldsTagLib (fields "5.0.1" API)
@@ -37,7 +37,7 @@
@@ -500,7 +500,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
diff --git a/5.0.x/api/grails/plugin/formfields/FormFieldsTemplateService.html b/5.0.x/api/grails/plugin/formfields/FormFieldsTemplateService.html
index fc428f55..e7d7e0b7 100644
--- a/5.0.x/api/grails/plugin/formfields/FormFieldsTemplateService.html
+++ b/5.0.x/api/grails/plugin/formfields/FormFieldsTemplateService.html
@@ -27,7 +27,7 @@
- FormFieldsTemplateService (fields "5.0.0" API)
+ FormFieldsTemplateService (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/PropertyPathAccessor.html b/5.0.x/api/grails/plugin/formfields/PropertyPathAccessor.html
index 3d7b1682..8b4f3c1f 100644
--- a/5.0.x/api/grails/plugin/formfields/PropertyPathAccessor.html
+++ b/5.0.x/api/grails/plugin/formfields/PropertyPathAccessor.html
@@ -27,7 +27,7 @@
- PropertyPathAccessor (fields "5.0.0" API)
+ PropertyPathAccessor (fields "5.0.1" API)
@@ -37,7 +37,7 @@
diff --git a/5.0.x/api/grails/plugin/formfields/package-summary.html b/5.0.x/api/grails/plugin/formfields/package-summary.html
index f6190aa6..d873507f 100644
--- a/5.0.x/api/grails/plugin/formfields/package-summary.html
+++ b/5.0.x/api/grails/plugin/formfields/package-summary.html
@@ -22,7 +22,7 @@
-grails.plugin.formfields (fields "5.0.0" API)
+grails.plugin.formfields (fields "5.0.1" API)
@@ -31,7 +31,7 @@
diff --git a/5.0.x/api/help-doc.html b/5.0.x/api/help-doc.html
index 68d5c042..6c44fb72 100644
--- a/5.0.x/api/help-doc.html
+++ b/5.0.x/api/help-doc.html
@@ -25,7 +25,7 @@
- API Help (fields "5.0.0" API)
+ API Help (fields "5.0.1" API)
@@ -34,7 +34,7 @@
diff --git a/5.0.x/api/index-all.html b/5.0.x/api/index-all.html
index d2ecb0a3..78b50aa1 100644
--- a/5.0.x/api/index-all.html
+++ b/5.0.x/api/index-all.html
@@ -24,14 +24,14 @@
- Index (fields "5.0.0" API)
+ Index (fields "5.0.1" API)
diff --git a/5.0.x/api/index.html b/5.0.x/api/index.html
index 63f2e635..e560adeb 100644
--- a/5.0.x/api/index.html
+++ b/5.0.x/api/index.html
@@ -21,7 +21,7 @@
-Index (fields "5.0.0" API)
+Index (fields "5.0.1" API)
diff --git a/5.0.x/api/overview-frame.html b/5.0.x/api/overview-frame.html
index 5fabdd63..d2c9b0de 100644
--- a/5.0.x/api/overview-frame.html
+++ b/5.0.x/api/overview-frame.html
@@ -21,7 +21,7 @@
-Overview (fields "5.0.0" API)
+Overview (fields "5.0.1" API)
diff --git a/5.0.x/api/overview-summary.html b/5.0.x/api/overview-summary.html
index 15ba4523..af86ba59 100644
--- a/5.0.x/api/overview-summary.html
+++ b/5.0.x/api/overview-summary.html
@@ -22,7 +22,7 @@
-Overview (fields "5.0.0" API)
+Overview (fields "5.0.1" API)
@@ -32,7 +32,7 @@
@@ -66,7 +66,7 @@