Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
62eae6d0
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,发现更多精彩内容 >>
提交
62eae6d0
编写于
6月 17, 2009
作者:
K
Keith Donald
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
message argument accessor - thanks andy
上级
a4419c98
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
35 addition
and
29 deletion
+35
-29
org.springframework.context/src/main/java/org/springframework/ui/lifecycle/WebBindAndValidateLifecycle.java
...ngframework/ui/lifecycle/WebBindAndValidateLifecycle.java
+12
-7
org.springframework.context/src/main/java/org/springframework/ui/message/DefaultMessageResolver.java
...rg/springframework/ui/message/DefaultMessageResolver.java
+23
-18
org.springframework.context/src/test/java/org/springframework/ui/message/MessageBuilderTests.java
...a/org/springframework/ui/message/MessageBuilderTests.java
+0
-2
org.springframework.context/src/test/java/org/springframework/ui/message/support/DefaultMessageContextTests.java
...mework/ui/message/support/DefaultMessageContextTests.java
+0
-2
未找到文件。
org.springframework.context/src/main/java/org/springframework/ui/lifecycle/WebBindAndValidateLifecycle.java
浏览文件 @
62eae6d0
...
...
@@ -56,15 +56,20 @@ public class WebBindAndValidateLifecycle {
// TODO get validation results
validator
.
validate
(
binder
.
getModel
(),
bindingResults
.
successes
().
properties
());
}
// TODO make message translation pluggable
MessageBuilder
builder
=
new
MessageBuilder
();
for
(
BindingResult
result
:
bindingResults
.
failures
())
{
MessageResolver
message
=
builder
.
code
(
modelPropertyError
(
result
)).
code
(
propertyError
(
result
)).
code
(
typeError
(
result
)).
code
(
error
(
result
)).
resolvableArg
(
"label"
,
getModelProperty
(
result
)).
arg
(
"value"
,
result
.
getUserValue
()).
// TODO add binding el resolver allowing binding.format to be called
arg
(
"binding"
,
binder
.
getBinding
(
result
.
getProperty
())).
// TODO allow binding result to contribute additional arguments
build
();
MessageResolver
message
=
builder
.
code
(
modelPropertyError
(
result
)).
code
(
propertyError
(
result
)).
code
(
typeError
(
result
)).
code
(
error
(
result
)).
resolvableArg
(
"label"
,
getModelProperty
(
result
)).
arg
(
"value"
,
result
.
getUserValue
()).
// TODO add binding el resolver allowing binding.format to be called
arg
(
"binding"
,
binder
.
getBinding
(
result
.
getProperty
())).
// TODO allow binding result to contribute additional arguments
build
();
// TODO should model name be part of element id?
messageContext
.
add
(
message
,
result
.
getProperty
());
}
...
...
org.springframework.context/src/main/java/org/springframework/ui/message/DefaultMessageResolver.java
浏览文件 @
62eae6d0
...
...
@@ -20,7 +20,6 @@ import java.util.Map;
import
org.springframework.context.MessageSource
;
import
org.springframework.context.MessageSourceResolvable
;
import
org.springframework.context.expression.MapAccessor
;
import
org.springframework.core.style.ToStringCreator
;
import
org.springframework.expression.AccessException
;
import
org.springframework.expression.EvaluationContext
;
...
...
@@ -40,13 +39,13 @@ final class DefaultMessageResolver implements MessageResolver, MessageSourceReso
private
String
[]
codes
;
private
Map
<
String
,
Object
>
args
;
private
String
defaultText
;
private
ExpressionParser
expressionParser
;
public
DefaultMessageResolver
(
Severity
severity
,
String
[]
codes
,
Map
<
String
,
Object
>
args
,
String
defaultText
,
ExpressionParser
expressionParser
)
{
public
DefaultMessageResolver
(
Severity
severity
,
String
[]
codes
,
Map
<
String
,
Object
>
args
,
String
defaultText
,
ExpressionParser
expressionParser
)
{
this
.
severity
=
severity
;
this
.
codes
=
codes
;
this
.
args
=
args
;
...
...
@@ -67,8 +66,7 @@ final class DefaultMessageResolver implements MessageResolver, MessageSourceReso
try
{
StandardEvaluationContext
context
=
new
StandardEvaluationContext
();
context
.
setRootObject
(
args
);
context
.
addPropertyAccessor
(
new
MapAccessor
());
context
.
addPropertyAccessor
(
new
MessageSourceResolvableAccessor
(
messageSource
,
locale
));
context
.
addPropertyAccessor
(
new
MessageArgumentAccessor
(
messageSource
,
locale
));
String
text
=
(
String
)
message
.
getValue
(
context
);
return
new
TextMessage
(
severity
,
text
);
}
catch
(
EvaluationException
e
)
{
...
...
@@ -116,37 +114,44 @@ final class DefaultMessageResolver implements MessageResolver, MessageSourceReso
}
private
static
class
MessageSourceResolvable
Accessor
implements
PropertyAccessor
{
static
class
MessageArgument
Accessor
implements
PropertyAccessor
{
private
MessageSource
messageSource
;
private
Locale
locale
;
public
Message
SourceResolvable
Accessor
(
MessageSource
messageSource
,
Locale
locale
)
{
public
Message
Argument
Accessor
(
MessageSource
messageSource
,
Locale
locale
)
{
this
.
messageSource
=
messageSource
;
this
.
locale
=
locale
;
}
public
boolean
canRead
(
EvaluationContext
context
,
Object
target
,
String
name
)
throws
AccessException
{
return
true
;
return
(((
Map
)
target
).
containsKey
(
name
))
;
}
public
TypedValue
read
(
EvaluationContext
context
,
Object
target
,
String
name
)
throws
AccessException
{
// TODO this does not get called when resolving MessageSourceResolvable variables; only when accessing properties on MessageSourceResolvable targets.
return
new
TypedValue
(
messageSource
.
getMessage
((
MessageSourceResolvable
)
target
,
locale
));
Object
o
=
((
Map
)
target
).
get
(
name
);
if
(
o
instanceof
MessageSourceResolvable
)
{
String
message
=
messageSource
.
getMessage
((
MessageSourceResolvable
)
o
,
locale
);
return
new
TypedValue
(
message
);
}
else
{
return
new
TypedValue
(
o
);
}
}
public
boolean
canWrite
(
EvaluationContext
context
,
Object
target
,
String
name
)
throws
AccessException
{
return
false
;
}
public
void
write
(
EvaluationContext
context
,
Object
target
,
String
name
,
Object
newValue
)
throws
AccessException
{
public
void
write
(
EvaluationContext
context
,
Object
target
,
String
name
,
Object
newValue
)
throws
AccessException
{
throw
new
UnsupportedOperationException
(
"Should not be called"
);
}
public
Class
<?>[]
getSpecificTargetClasses
()
{
return
new
Class
[]
{
MessageSourceResolvable
.
class
};
}
public
Class
[]
getSpecificTargetClasses
()
{
return
new
Class
[]
{
Map
.
class
};
}
}
}
\ No newline at end of file
org.springframework.context/src/test/java/org/springframework/ui/message/MessageBuilderTests.java
浏览文件 @
62eae6d0
...
...
@@ -4,7 +4,6 @@ import static org.junit.Assert.assertEquals;
import
java.util.Locale
;
import
org.junit.Ignore
;
import
org.junit.Test
;
public
class
MessageBuilderTests
{
...
...
@@ -12,7 +11,6 @@ public class MessageBuilderTests {
private
MessageBuilder
builder
=
new
MessageBuilder
();
@Test
@Ignore
public
void
buildMessage
()
{
MessageResolver
resolver
=
builder
.
severity
(
Severity
.
ERROR
).
code
(
"invalidFormat"
).
resolvableArg
(
"label"
,
"mathForm.decimalField"
)
.
arg
(
"format"
,
"#,###.##"
).
defaultText
(
"Field must be in format #,###.##"
).
build
();
...
...
org.springframework.context/src/test/java/org/springframework/ui/message/support/DefaultMessageContextTests.java
浏览文件 @
62eae6d0
...
...
@@ -8,7 +8,6 @@ import java.util.Map;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Ignore
;
import
org.junit.Test
;
import
org.springframework.context.i18n.LocaleContextHolder
;
import
org.springframework.ui.message.Message
;
...
...
@@ -36,7 +35,6 @@ public class DefaultMessageContextTests {
}
@Test
@Ignore
public
void
addMessage
()
{
MessageBuilder
builder
=
new
MessageBuilder
();
MessageResolver
message
=
builder
.
severity
(
Severity
.
ERROR
).
code
(
"invalidFormat"
).
resolvableArg
(
"label"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录