From b2e1bbdceac4a9704e2e9e73c019573ced82f1c6 Mon Sep 17 00:00:00 2001 From: Jon Oler Date: Fri, 29 Mar 2013 00:47:42 -0600 Subject: [PATCH 1/2] Issue #17: Wire spring dependencies in newly created domain/command object in JQueryRemoteValidationController. --- .../validation/ui/JQueryRemoteValidatorController.groovy | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy b/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy index d325a48..729d7be 100644 --- a/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy +++ b/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy @@ -15,6 +15,7 @@ package org.grails.jquery.validation.ui import org.codehaus.groovy.grails.validation.ConstrainedPropertyBuilder +import org.springframework.beans.factory.config.AutowireCapableBeanFactory import org.springframework.validation.BeanPropertyBindingResult /** @@ -34,6 +35,9 @@ class JQueryRemoteValidatorController { def validatableInstance if (!params.id || params.id.equals("0")) { validatableInstance = validatableClass.newInstance() + // Wire in spring dependencies... + applicationContext.autowireCapableBeanFactory?.autowireBeanProperties( + validatableInstance, AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, false) } else { validatableInstance = validatableClass.get(params.id.toLong()) } @@ -51,7 +55,9 @@ class JQueryRemoteValidatorController { } constrainedProperty.validate(validatableInstance, propertyValue, errors) - if(validatableInstance.isAttached()) validatableInstance.discard() + if (grailsApplication.isDomainClass(validatableInstance.getClass()) && validatableInstance.isAttached()) { + validatableInstance.discard() + } def fieldError = errors.getFieldError(params.property) // println "fieldError = ${fieldError}, code = ${fieldError?.code}, params.constraint = ${params.constraint}" From 3f161d4e308b7e0beda1aba2c90f04df45c9a47f Mon Sep 17 00:00:00 2001 From: johnny Date: Tue, 2 Apr 2013 13:39:17 -0700 Subject: [PATCH 2/2] Fix for issue #27, controller wasn't getting passed all available form fields --- .../ui/JQueryRemoteValidatorController.groovy | 13 ++++++++++++- .../validation/ui/JqueryValidationService.groovy | 4 +++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy b/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy index d325a48..888ffc4 100644 --- a/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy +++ b/grails-app/controllers/org/grails/jquery/validation/ui/JQueryRemoteValidatorController.groovy @@ -49,7 +49,18 @@ class JQueryRemoteValidatorController { bindData(validatableInstance, params, [include: [params.property]]) propertyValue = validatableInstance."${params.property}" } - + + // Need to bind multiple fields from the form for custom validation with more than one parameter. + def serializedDataMap = [:] + def serializedData = params.serializedData.decodeURL().split("&") + serializedData.collect { + it = it.split("=") + if(it.size() == 2){ + serializedDataMap.put(it[0],it[1]) + } + } + bindData(validatableInstance, serializedDataMap) + constrainedProperty.validate(validatableInstance, propertyValue, errors) if(validatableInstance.isAttached()) validatableInstance.discard() def fieldError = errors.getFieldError(params.property) diff --git a/grails-app/services/org/grails/jquery/validation/ui/JqueryValidationService.groovy b/grails-app/services/org/grails/jquery/validation/ui/JqueryValidationService.groovy index d4231a1..3ffb99e 100644 --- a/grails-app/services/org/grails/jquery/validation/ui/JqueryValidationService.groovy +++ b/grails-app/services/org/grails/jquery/validation/ui/JqueryValidationService.groovy @@ -172,7 +172,9 @@ class JqueryValidationService { "\ttype: 'post',\n" + "\tdata: {\n" + "\t\tvalidatableClass: '${validatableClassName}',\n" + - "\t\tproperty: '${propertyName}'" + "\t\tproperty: '${propertyName}',\n"+ + "\t\tserializedData: function() { return myForm.serialize() }\n" + if (!constraintName.equals('unique') && !constraintName.equals('validator')) { remoteJavaScriptConstraints += ",\n\t\tconstraint: '${constraintName}'"