From 6b86d152426116eeb4335b7dc834644d053fbe96 Mon Sep 17 00:00:00 2001 From: Michael Frankfurter Date: Fri, 16 Nov 2012 21:52:02 +0100 Subject: [PATCH] GRAILS-8330: changed JSON encoding of params attribute to respect List type as expected. --- .../plugins/jquery/JQueryProvider.groovy | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy b/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy index c7d8801..5ddc6d7 100755 --- a/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy +++ b/src/groovy/org/codehaus/groovy/grails/plugins/jquery/JQueryProvider.groovy @@ -23,6 +23,22 @@ import org.codehaus.groovy.grails.plugins.web.taglib.JavascriptProvider * @author Finn Herpich (finn.herpich marfinn-software de) */ class JQueryProvider implements JavascriptProvider { + + /** + * encodeParamValue creates a JSON encoded param + * + * @param value + * + * @return the JSON representation of the value + */ + def encodeParamValue(value) { + if (value instanceof List) { + "[ " + value.collect { encodeParamValue(it) }.join(',') + " ]" + } else { + "'" + "$value".encodeAsJavaScript() + "'" + } + } + /** * doRemoteFunction creates a jQuery-AJAX-Call * @@ -67,11 +83,7 @@ class JQueryProvider implements JavascriptProvider { if(attrs?.params instanceof Map) { hasParams = true out << attrs.remove('params').collect { k, v -> - "\'" + - "${k}".encodeAsJavaScript() + - "\': \'" + - "${v}".encodeAsJavaScript() + - "\'" + "'" + "${k}".encodeAsJavaScript() + "': " + encodeParamValue(v) }.join(",") } @@ -80,11 +92,7 @@ class JQueryProvider implements JavascriptProvider { out << "," out << attrs.remove('jsParams').collect { k, v -> - "\'" + - "${k}".encodeAsJavaScript() + - "\': \'" + - "${v}".encodeAsJavaScript() + - "\'" + "'" + "${k}".encodeAsJavaScript() + "': " + encodeParamValue(v) }.join(",") }