Author: cbegin
Date: Sat Jan 9 20:02:43 2010
New Revision: 897529
URL: http://svn.apache.org/viewvc?rev=897529&view=rev
Log:
applied ibatis-3beta7-mapfix3.patch provided by Martin Ellis and Joe Gooch as
per email thread: Using Map as a parameter object 12-Dec-2009
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
URL:
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java?rev=897529&r1=897528&r2=897529&view=diff
==============================================================================
---
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
(original)
+++
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
Sat Jan 9 20:02:43 2010
@@ -10,6 +10,8 @@
public class DynamicContext {
+ public static final String PARAMETER_OBJECT_KEY = "_parameter";
+
static {
OgnlRuntime.setPropertyAccessor(ContextMap.class, new ContextAccessor());
}
@@ -19,16 +21,14 @@
private int uniqueNumber = 0;
public DynamicContext(Object parameterObject) {
- if (parameterObject instanceof Map) {
- bindings.putAll((Map<String, Object>) parameterObject);
- } else if (parameterObject != null) {
+ if (parameterObject != null && !(parameterObject instanceof Map)) {
MetaObject metaObject = MetaObject.forObject(parameterObject);
String[] names = metaObject.getGetterNames();
for (String name : names) {
bindings.put(name, metaObject.getValue(name));
}
}
- bindings.put("_parameter", parameterObject);
+ bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
}
public Map<String, Object> getBindings() {
@@ -56,10 +56,22 @@
}
static class ContextAccessor implements PropertyAccessor {
+
public Object getProperty(Map context, Object target, Object name)
throws OgnlException {
Map map = (Map) target;
- return map.get(name);
+
+ Object result = map.get(name);
+ if (result != null) {
+ return result;
+ }
+
+ Object parameterObject = map.get(PARAMETER_OBJECT_KEY);
+ if (parameterObject instanceof Map) {
+ return ((Map)parameterObject).get(name);
+ }
+
+ return null;
}
public void setProperty(Map context, Object target, Object name, Object
value)