From f9ccaa3cd16b98ab8f4a2b2df17d1d41dab7b162 Mon Sep 17 00:00:00 2001 From: Jacob Aae Mikkelsen Date: Wed, 17 Oct 2018 23:01:47 +0200 Subject: [PATCH 1/9] f:table should pass extra properties to template --- .../grails/plugin/formfields/FormFieldsTagLib.groovy | 2 +- .../grails/plugin/formfields/taglib/TableSpec.groovy | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy index 56d23703..ab6c23bb 100644 --- a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy +++ b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy @@ -240,7 +240,7 @@ class FormFieldsTagLib { out << render( template: "/templates/_fields/$template", - model: [domainClass: domainClass, + model: attrs + [domainClass: domainClass, domainProperties: columnProperties, columnProperties: columnProperties, collection: collection, diff --git a/src/test/groovy/grails/plugin/formfields/taglib/TableSpec.groovy b/src/test/groovy/grails/plugin/formfields/taglib/TableSpec.groovy index 94690c27..abf0a95e 100644 --- a/src/test/groovy/grails/plugin/formfields/taglib/TableSpec.groovy +++ b/src/test/groovy/grails/plugin/formfields/taglib/TableSpec.groovy @@ -277,4 +277,13 @@ class TableSpec extends AbstractFormFieldsTagLibSpec { then: table.thead.tr.th.collect { it.text().trim() } == columns } + + @Issue('https://github.com/grails-fields-plugin/grails-fields/issues/286') + void "table should pass extra properties to template"() { + given: + views["/templates/_fields/_table.gsp"] = '${foo}
' + + expect: + applyTemplate('', [personList: personList]) == 'bar
' + } } From f680850917946ed5283a4f6f2619243aaabe6e7f Mon Sep 17 00:00:00 2001 From: Jacob Aae Mikkelsen Date: Thu, 18 Oct 2018 20:14:22 +0200 Subject: [PATCH 2/9] Improved documentation for table - own properties and template --- src/main/docs/ref/Tags/table.adoc | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/docs/ref/Tags/table.adoc b/src/main/docs/ref/Tags/table.adoc index 2b7f1a0e..b3473c5c 100644 --- a/src/main/docs/ref/Tags/table.adoc +++ b/src/main/docs/ref/Tags/table.adoc @@ -34,7 +34,18 @@ The template for `` should be in grails-app/views/templates/_fields/_table.gsp ---- -When *theme* is specified, the _\_display_ template will be searched first in *theme*. +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. + +[source] +---- + + + + +---- + +When *theme* is specified, the _\_display_ template will be searched first in *theme*, but the theme property does *not* directly apply to table. ===== Attributes @@ -56,7 +67,9 @@ When *theme* is specified, the _\_display_ template will be searched first in *t ===== 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`. You can find a starting point for a new file link:https://github.com/grails-fields-plugin/grails-fields/blob/master/grails-app/views/templates/_fields/_table.gsp[on GitHub] +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 link:https://github.com/grails-fields-plugin/grails-fields/blob/master/grails-app/views/templates/_fields/_table.gsp[on GitHub] ====== Model in the template From 242ea5cd665b282819da7d49cacbc27b41a821d2 Mon Sep 17 00:00:00 2001 From: sdelamo Date: Fri, 7 Dec 2018 18:29:07 +0100 Subject: [PATCH 3/9] Fields Plugin should load after Domain Class Plugin Domain Class Plugins registeres the necessary ConstraintsEvaluator --- .../groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy b/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy index 3eaa402c..eed44e61 100644 --- a/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy +++ b/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy @@ -17,7 +17,6 @@ package grails.plugin.formfields import grails.plugins.Plugin - import grails.validation.ConstraintsEvaluator import org.grails.scaffolding.model.DomainModelServiceImpl import org.grails.scaffolding.model.property.DomainPropertyFactoryImpl @@ -26,6 +25,8 @@ class FieldsGrailsPlugin extends Plugin { def grailsVersion = '3.0 > *' + def loadAfter = ['domainClass'] + @Override Closure doWithSpring() {{-> beanPropertyAccessorFactory(BeanPropertyAccessorFactory) { From 06639502e10f47c55ff3304f8f53eaf66bc7f232 Mon Sep 17 00:00:00 2001 From: sdelamo Date: Fri, 7 Dec 2018 19:24:38 +0100 Subject: [PATCH 4/9] Use new bean name for Constraints Evaluator --- .../grails/plugin/formfields/FieldsGrailsPlugin.groovy | 5 +++-- .../grails/plugin/formfields/BuildsAccessorFactory.groovy | 2 +- .../formfields/taglib/AbstractFormFieldsTagLibSpec.groovy | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy b/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy index eed44e61..6fc84a85 100644 --- a/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy +++ b/src/main/groovy/grails/plugin/formfields/FieldsGrailsPlugin.groovy @@ -17,12 +17,13 @@ package grails.plugin.formfields import grails.plugins.Plugin -import grails.validation.ConstraintsEvaluator import org.grails.scaffolding.model.DomainModelServiceImpl import org.grails.scaffolding.model.property.DomainPropertyFactoryImpl class FieldsGrailsPlugin extends Plugin { + static final String CONSTRAINTS_EVALULATOR_BEAN_NAME = 'validateableConstraintsEvaluator' + def grailsVersion = '3.0 > *' def loadAfter = ['domainClass'] @@ -30,7 +31,7 @@ class FieldsGrailsPlugin extends Plugin { @Override Closure doWithSpring() {{-> beanPropertyAccessorFactory(BeanPropertyAccessorFactory) { - constraintsEvaluator = ref(ConstraintsEvaluator.BEAN_NAME) + constraintsEvaluator = ref(CONSTRAINTS_EVALULATOR_BEAN_NAME) proxyHandler = ref('proxyHandler') fieldsDomainPropertyFactory = ref('fieldsDomainPropertyFactory') grailsDomainClassMappingContext = ref('grailsDomainClassMappingContext') diff --git a/src/test/groovy/grails/plugin/formfields/BuildsAccessorFactory.groovy b/src/test/groovy/grails/plugin/formfields/BuildsAccessorFactory.groovy index 7c8a6fa1..d5fb99f4 100644 --- a/src/test/groovy/grails/plugin/formfields/BuildsAccessorFactory.groovy +++ b/src/test/groovy/grails/plugin/formfields/BuildsAccessorFactory.groovy @@ -17,7 +17,7 @@ abstract class BuildsAccessorFactory extends Specification implements GrailsWebU def dpf = new DomainPropertyFactoryImpl(grailsDomainClassMappingContext: applicationContext.getBean("grailsDomainClassMappingContext", MappingContext), trimStrings: true, convertEmptyStringsToNull: true) beanPropertyAccessorFactory(BeanPropertyAccessorFactory) { - constraintsEvaluator = ref('org.grails.beans.ConstraintsEvaluator') + constraintsEvaluator = ref(FieldsGrailsPlugin.CONSTRAINTS_EVALULATOR_BEAN_NAME) proxyHandler = new DefaultProxyHandler() grailsDomainClassMappingContext = ref("grailsDomainClassMappingContext") fieldsDomainPropertyFactory = dpf diff --git a/src/test/groovy/grails/plugin/formfields/taglib/AbstractFormFieldsTagLibSpec.groovy b/src/test/groovy/grails/plugin/formfields/taglib/AbstractFormFieldsTagLibSpec.groovy index 6d2a91ba..b7d0066e 100644 --- a/src/test/groovy/grails/plugin/formfields/taglib/AbstractFormFieldsTagLibSpec.groovy +++ b/src/test/groovy/grails/plugin/formfields/taglib/AbstractFormFieldsTagLibSpec.groovy @@ -2,6 +2,7 @@ package grails.plugin.formfields.taglib import grails.core.support.proxy.DefaultProxyHandler import grails.plugin.formfields.BeanPropertyAccessorFactory +import grails.plugin.formfields.FieldsGrailsPlugin import grails.testing.gorm.DataTest import grails.testing.web.GrailsWebUnitTest import org.grails.datastore.mapping.model.MappingContext @@ -44,7 +45,7 @@ abstract class AbstractFormFieldsTagLibSpec extends Specification implements Gra domainPropertyFactory = ref('fieldsDomainPropertyFactory') } beanPropertyAccessorFactory(BeanPropertyAccessorFactory) { - constraintsEvaluator = ref('org.grails.beans.ConstraintsEvaluator') + constraintsEvaluator = ref(FieldsGrailsPlugin.CONSTRAINTS_EVALULATOR_BEAN_NAME) proxyHandler = new DefaultProxyHandler() grailsDomainClassMappingContext = ref("grailsDomainClassMappingContext") fieldsDomainPropertyFactory = ref('fieldsDomainPropertyFactory') From 3073f5b9f184e781e7b3f7c7800c3bc1b8dfdfc1 Mon Sep 17 00:00:00 2001 From: sdelamo Date: Thu, 20 Dec 2018 16:59:16 +0100 Subject: [PATCH 5/9] Use every MappingContext --- .../plugin/formfields/FormFieldsTagLib.groovy | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy index fa9b2c9a..2a6558f4 100644 --- a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy +++ b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy @@ -16,6 +16,7 @@ package grails.plugin.formfields +import grails.core.GrailsApplication import groovy.transform.CompileStatic import groovy.xml.MarkupBuilder import org.apache.commons.lang.StringUtils @@ -59,7 +60,7 @@ class FormFieldsTagLib { FormFieldsTemplateService formFieldsTemplateService BeanPropertyAccessorFactory beanPropertyAccessorFactory DomainPropertyFactory fieldsDomainPropertyFactory - MappingContext grailsDomainClassMappingContext + GrailsApplication grailsApplication DomainModelService domainModelService LocaleResolver localeResolver CodecLookup codecLookup @@ -221,7 +222,7 @@ class FormFieldsTagLib { def collection = resolveBean(attrs.remove('collection')) PersistentEntity domainClass if (attrs.containsKey('domainClass')) { - domainClass = grailsDomainClassMappingContext.getPersistentEntity((String) attrs.remove('domainClass')) + domainClass = resolveDomainClass((String) attrs.remove('domainClass')) } else { domainClass = (collection instanceof Collection) && collection ? resolveDomainClass(collection.iterator().next()) : null } @@ -523,7 +524,13 @@ class FormFieldsTagLib { } private PersistentEntity resolveDomainClass(Class beanClass) { - grailsDomainClassMappingContext.getPersistentEntity(beanClass.name) + resolveDomainClass(beanClass.name) + } + + private PersistentEntity resolveDomainClass(String beanClassName) { + grailsApplication.mainContext.getBeanNamesForType(MappingContext).findResult { String beanName -> + grailsApplication.mainContext.getBean(beanName, MappingContext).getPersistentEntity(beanClassName) + } } private List resolvePersistentProperties(PersistentEntity domainClass, Map attrs, boolean list = false) { From 1cc672245bc2765944c020fcbff5446fc38c911f Mon Sep 17 00:00:00 2001 From: sdelamo Date: Thu, 20 Dec 2018 17:05:00 +0100 Subject: [PATCH 6/9] inject MappingContext collection --- .../grails/plugin/formfields/FormFieldsTagLib.groovy | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy index 2a6558f4..ecbc537b 100644 --- a/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy +++ b/grails-app/taglib/grails/plugin/formfields/FormFieldsTagLib.groovy @@ -31,6 +31,7 @@ import org.grails.scaffolding.model.DomainModelService import org.grails.scaffolding.model.property.Constrained import org.grails.scaffolding.model.property.DomainPropertyFactory import org.grails.web.servlet.mvc.GrailsWebRequest +import org.springframework.beans.factory.annotation.Autowired import org.springframework.beans.factory.annotation.Value import org.springframework.web.servlet.LocaleResolver @@ -60,7 +61,10 @@ class FormFieldsTagLib { FormFieldsTemplateService formFieldsTemplateService BeanPropertyAccessorFactory beanPropertyAccessorFactory DomainPropertyFactory fieldsDomainPropertyFactory - GrailsApplication grailsApplication + + @Autowired(required = false) + Collection mappingContexts + DomainModelService domainModelService LocaleResolver localeResolver CodecLookup codecLookup @@ -528,8 +532,8 @@ class FormFieldsTagLib { } private PersistentEntity resolveDomainClass(String beanClassName) { - grailsApplication.mainContext.getBeanNamesForType(MappingContext).findResult { String beanName -> - grailsApplication.mainContext.getBean(beanName, MappingContext).getPersistentEntity(beanClassName) + mappingContexts.findResult { MappingContext mappingContext -> + mappingContext.getPersistentEntity(beanClassName) } } From 72fc38ae4ad517a2f532f29e5771610548a5918a Mon Sep 17 00:00:00 2001 From: sdelamo Date: Wed, 2 Jan 2019 08:49:47 +0100 Subject: [PATCH 7/9] Bump up Groovy to 2.5.5 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index df8f58de..bdb5ed8f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ projectVersion=3.0.0.BUILD-SNAPSHOT #projectVersion=2.2.7 grailsVersion=4.0.0.BUILD-SNAPSHOT scaffoldingVersion=2.0.0.BUILD-SNAPSHOT -groovyVersion=2.5.4 +groovyVersion=2.5.5 cglibNodepVersion=3.2.9 joddWotVersion=3.3.8 asciidoc=true From 7bb8442bbebbc12c38d07127a10ceb8e3d7a0a96 Mon Sep 17 00:00:00 2001 From: sdelamo Date: Wed, 2 Jan 2019 17:48:36 +0100 Subject: [PATCH 8/9] Bump up serverlet api version to 4.0.1 --- build.gradle | 2 +- gradle.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 9d4ac1f8..ff1a2781 100644 --- a/build.gradle +++ b/build.gradle @@ -40,7 +40,7 @@ dependencies { provided "org.grails:grails-web-boot" provided "org.grails:grails-dependencies" - provided 'javax.servlet:javax.servlet-api:3.1.0' + provided "javax.servlet:javax.servlet-api:$servletApiVersion" compile "org.grails:scaffolding-core:$scaffoldingVersion" diff --git a/gradle.properties b/gradle.properties index bdb5ed8f..ae955324 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,7 @@ scaffoldingVersion=2.0.0.BUILD-SNAPSHOT groovyVersion=2.5.5 cglibNodepVersion=3.2.9 joddWotVersion=3.3.8 +servletApiVersion=4.0.1 asciidoc=true githubSlug=grails-fields-plugin/grails-fields githubBranch=master From b7b7de214161d4cd2b00a1532e803d001138bc17 Mon Sep 17 00:00:00 2001 From: graemerocher Date: Tue, 19 Feb 2019 12:19:01 +0100 Subject: [PATCH 9/9] Update dependencies --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index ae955324..93758ee2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ projectVersion=3.0.0.BUILD-SNAPSHOT #projectVersion=2.2.7 -grailsVersion=4.0.0.BUILD-SNAPSHOT +grailsVersion=4.0.0.M1 scaffoldingVersion=2.0.0.BUILD-SNAPSHOT -groovyVersion=2.5.5 +groovyVersion=2.5.6 cglibNodepVersion=3.2.9 joddWotVersion=3.3.8 servletApiVersion=4.0.1