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..df28c98 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()) } @@ -49,9 +53,22 @@ 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() + 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}" 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}'"