Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
0195b0da
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0195b0da
编写于
10月 14, 2010
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
BeanWrapper does not attempt to populate Map values on access (just auto-grows Map itself)
上级
27a10c74
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
12 addition
and
33 deletion
+12
-33
org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java
.../main/java/org/springframework/beans/BeanWrapperImpl.java
+10
-24
org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperAutoGrowingTests.java
...rg/springframework/beans/BeanWrapperAutoGrowingTests.java
+2
-9
未找到文件。
org.springframework.beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java
浏览文件 @
0195b0da
...
...
@@ -586,18 +586,22 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
PropertyTokenHolder
tokens
=
new
PropertyTokenHolder
();
tokens
.
actualName
=
propertyName
;
tokens
.
canonicalName
=
propertyName
;
setPropertyValue
(
tokens
,
createDefaultPropertyValue
(
tokens
));
return
getPropertyValue
(
tokens
);
return
setDefaultValue
(
tokens
);
}
private
Object
setDefaultValue
(
PropertyTokenHolder
tokens
)
{
setPropertyValue
(
tokens
,
createDefaultPropertyValue
(
tokens
));
return
getPropertyValue
(
tokens
);
PropertyValue
pv
=
createDefaultPropertyValue
(
tokens
);
setPropertyValue
(
tokens
,
pv
);
return
pv
.
getValue
();
}
private
PropertyValue
createDefaultPropertyValue
(
PropertyTokenHolder
tokens
)
{
PropertyDescriptor
pd
=
getCachedIntrospectionResults
().
getPropertyDescriptor
(
tokens
.
actualName
);
Object
defaultValue
=
newValue
(
pd
.
getPropertyType
(),
tokens
.
canonicalName
);
Class
type
=
getPropertyType
(
tokens
.
canonicalName
);
if
(
type
==
null
)
{
throw
new
NullValueInNestedPathException
(
getRootClass
(),
this
.
nestedPath
+
tokens
.
canonicalName
,
"Could not determine property type for auto-growing a default value"
);
}
Object
defaultValue
=
newValue
(
type
,
tokens
.
canonicalName
);
return
new
PropertyValue
(
tokens
.
canonicalName
,
defaultValue
);
}
...
...
@@ -791,9 +795,6 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
// must not kick in for map keys but rather only for map values.
Object
convertedMapKey
=
convertIfNecessary
(
null
,
null
,
key
,
mapKeyType
,
new
PropertyTypeDescriptor
(
pd
,
new
MethodParameter
(
pd
.
getReadMethod
(),
-
1
),
mapKeyType
));
// Pass full property name and old value in here, since we want full
// conversion ability for map values.
growMapIfNecessary
(
map
,
convertedMapKey
,
indexedPropertyName
,
pd
,
i
+
1
);
value
=
map
.
get
(
convertedMapKey
);
}
else
{
...
...
@@ -865,21 +866,6 @@ public class BeanWrapperImpl extends AbstractPropertyAccessor implements BeanWra
}
}
@SuppressWarnings
(
"unchecked"
)
private
void
growMapIfNecessary
(
Map
map
,
Object
key
,
String
name
,
PropertyDescriptor
pd
,
int
nestingLevel
)
{
if
(!
this
.
autoGrowNestedPaths
)
{
return
;
}
if
(!
map
.
containsKey
(
key
))
{
Class
valueType
=
GenericCollectionTypeResolver
.
getMapValueReturnType
(
pd
.
getReadMethod
(),
nestingLevel
);
if
(
valueType
!=
null
)
{
map
.
put
(
key
,
newValue
(
valueType
,
name
));
}
}
}
@Override
public
void
setPropertyValue
(
String
propertyName
,
Object
value
)
throws
BeansException
{
BeanWrapperImpl
nestedBw
;
...
...
org.springframework.beans/src/test/java/org/springframework/beans/BeanWrapperAutoGrowingTests.java
浏览文件 @
0195b0da
...
...
@@ -129,17 +129,10 @@ public class BeanWrapperAutoGrowingTests {
wrapper
.
getPropertyValue
(
"listNotParameterized[0]"
);
}
@Test
public
void
getPropertyValueAutoGrowMap
()
{
assertNotNull
(
wrapper
.
getPropertyValue
(
"map[A]"
));
assertEquals
(
1
,
bean
.
getMap
().
size
());
assertTrue
(
bean
.
getMap
().
get
(
"A"
)
instanceof
Bean
);
}
@Test
public
void
setPropertyValueAutoGrowMap
()
{
wrapper
.
setPropertyValue
(
"map[A]
.prop"
,
"test"
);
assert
Equals
(
"test"
,
bean
.
getMap
().
get
(
"A"
).
getProp
()
);
wrapper
.
setPropertyValue
(
"map[A]
"
,
new
Bean
()
);
assert
True
(
bean
.
getMap
().
get
(
"A"
)
instanceof
Bean
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录