Skip to content

Commit b7997b2

Browse files
author
marcpalmer
committed
GRAILS-1270 - bindData( target, GrailsParameterMap, excludes) failed to bind anything
git-svn-id: https://svn.codehaus.org/grails/trunk@4604 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent a4aa652 commit b7997b2

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/web/org/codehaus/groovy/grails/web/metaclass/BindDynamicMethod.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,18 @@
1515
package org.codehaus.groovy.grails.web.metaclass;
1616

1717
import groovy.lang.MissingMethodException;
18+
import org.apache.commons.collections.CollectionUtils;
1819
import org.codehaus.groovy.grails.commons.metaclass.AbstractDynamicMethodInvocation;
1920
import org.codehaus.groovy.grails.web.binding.GrailsDataBinder;
2021
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap;
2122
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest;
2223
import org.springframework.beans.MutablePropertyValues;
2324
import org.springframework.beans.PropertyValues;
2425
import org.springframework.web.context.request.RequestContextHolder;
25-
import org.apache.commons.collections.CollectionUtils;
2626

2727
import javax.servlet.http.HttpServletRequest;
2828
import java.util.ArrayList;
29+
import java.util.Iterator;
2930
import java.util.List;
3031
import java.util.Map;
3132
import java.util.regex.Pattern;
@@ -59,7 +60,7 @@ public Object invoke(Object target, String methodName, Object[] arguments) {
5960
Object targetObject = arguments[0];
6061
Object bindParams = arguments[1];
6162
List disallowed = null;
62-
String filter = "";
63+
String filter = null;
6364
switch(arguments.length){
6465
case 3:
6566
if(arguments[2] instanceof String){

test/groovy/org/codehaus/groovy/grails/web/servlet/BindDataMethodTests.groovy

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package org.codehaus.groovy.grails.web.servlet;
1717

1818
import org.codehaus.groovy.grails.web.metaclass.BindDynamicMethod
1919
import org.codehaus.groovy.grails.web.servlet.mvc.AbstractGrailsControllerTests
20+
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap
2021

2122
/**
2223
* Tests for the bindData method
@@ -69,7 +70,27 @@ class BindDataMethodTests extends AbstractGrailsControllerTests {
6970
}
7071
}
7172

72-
void testBindDataWithPrefixFilterAndDisallowed() {
73+
void testBindDataWithDisallowedWithGrailsParameterMap() {
74+
runTest() {
75+
mockController = ga.getControllerClass("BindController")
76+
def input = [ 'metaClass' : this.metaClass, 'name' : 'Marc Palmer', 'email' : 'dontwantthis',
77+
'address.country':'gbr' ]
78+
input.each() {
79+
webRequest.currentRequest.addParameter((String)it.key, (String)it.value)
80+
}
81+
def excludes = ['email']
82+
def params = new GrailsParameterMap(webRequest.currentRequest)
83+
84+
method.invoke( mockController,"bindData", [target, params, excludes].toArray() )
85+
86+
assertEquals "Marc Palmer", target.name
87+
assertEquals safeMeta, target.metaClass
88+
assertEquals "gbr", target.address.country
89+
assertNull target.email
90+
}
91+
}
92+
93+
void testBindDataWithPrefixFilterAndDisallowed() {
7394
runTest() {
7495
mockController = ga.getControllerClass("BindController")
7596
def src = [ 'metaClass' : this.metaClass, 'mark.name' : 'Marc Palmer', 'mark.email' : 'dontwantthis',
@@ -99,4 +120,9 @@ class BindController {
99120
class CommandObject {
100121
String name
101122
String email
123+
Address address = new Address()
102124
}
125+
126+
class Address {
127+
String country
128+
}

0 commit comments

Comments
 (0)