HierarchicalMessageSource, MessageSourceResourceBundleMessageSourcepublic abstract class AbstractMessageSource extends MessageSourceSupport implements HierarchicalMessageSource
HierarchicalMessageSource interface,
implementing common handling of message variants, making it easy
to implement a specific strategy for a concrete MessageSource.
Subclasses must implement the abstract resolveCode(java.lang.String, java.util.Locale)
method. For efficient resolution of messages without arguments, the
resolveCodeWithoutArguments(java.lang.String, java.util.Locale) method should be overridden
as well, resolving messages without a MessageFormat being involved.
Note: By default, message texts are only parsed through MessageFormat if arguments have been passed in for the message. In case of no arguments, message texts will be returned as-is. As a consequence, you should only use MessageFormat escaping for messages with actual arguments, and keep all other messages unescaped. If you prefer to escape all messages, set the "alwaysUseMessageFormat" flag to "true".
Created: 2016. 2. 8.
log| Constructor | Description |
|---|---|
AbstractMessageSource() |
| Modifier and Type | Method | Description |
|---|---|---|
protected java.util.Properties |
getCommonMessages() |
Return a Properties object defining locale-independent common messages, if any.
|
protected java.lang.String |
getDefaultMessage(java.lang.String code) |
Return a fallback default message for the given code, if any.
|
java.lang.String |
getMessage(java.lang.String code,
java.lang.Object[] args,
java.lang.String defaultMessage,
java.util.Locale locale) |
Try to resolve the message.
|
java.lang.String |
getMessage(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale) |
Try to resolve the message.
|
protected java.lang.String |
getMessageFromParent(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale) |
Try to retrieve the given message from the parent MessageSource, if any.
|
protected java.lang.String |
getMessageInternal(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale) |
Resolve the given code and arguments as message in the given Locale,
returning
null if not found. |
MessageSource |
getParentMessageSource() |
Return the parent of this MessageSource, or
null if none. |
protected boolean |
isUseCodeAsDefaultMessage() |
Return whether to use the message code as default message instead of
throwing a NoSuchMessageException.
|
protected abstract java.text.MessageFormat |
resolveCode(java.lang.String code,
java.util.Locale locale) |
Subclasses must implement this method to resolve a message.
|
protected java.lang.String |
resolveCodeWithoutArguments(java.lang.String code,
java.util.Locale locale) |
Subclasses can override this method to resolve a message without arguments
in an optimized fashion, i.e.
|
void |
setCommonMessages(java.util.Properties commonMessages) |
Specify locale-independent common messages, with the message code as key
and the full message String (may contain argument placeholders) as value.
|
void |
setParentMessageSource(MessageSource parent) |
Set the parent that will be used to try to resolve messages
that this object can't resolve.
|
void |
setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage) |
Set whether to use the message code as default message instead of
throwing a NoSuchMessageException.
|
createMessageFormat, formatMessage, isAlwaysUseMessageFormat, renderDefaultMessage, resolveArguments, setAlwaysUseMessageFormatpublic void setParentMessageSource(MessageSource parent)
HierarchicalMessageSourcesetParentMessageSource in interface HierarchicalMessageSourceparent - the parent MessageSource that will be used to
resolve messages that this object can't resolve.
May be null, in which case no further resolution is possible.public MessageSource getParentMessageSource()
HierarchicalMessageSourcenull if none.getParentMessageSource in interface HierarchicalMessageSourcepublic void setCommonMessages(java.util.Properties commonMessages)
commonMessages - the common messagesprotected java.util.Properties getCommonMessages()
public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
Note: In case of a MessageSourceResolvable with multiple codes (like a FieldError) and a MessageSource that has a parent MessageSource, do not activate "useCodeAsDefaultMessage" in the parent: Else, you'll get the first code returned as message by the parent, without attempts to check further codes.
To be able to work with "useCodeAsDefaultMessage" turned on in the parent,
AbstractMessageSource and AbstractApplicationContext contain special checks
to delegate to the internal getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale) method if available.
In general, it is recommended to just use "useCodeAsDefaultMessage" during
development and not rely on it in production in the first place, though.
useCodeAsDefaultMessage - whether use code as default message#getMessage(String, Object[], Locale)protected boolean isUseCodeAsDefaultMessage()
Alternatively, consider overriding the getDefaultMessage(java.lang.String)
method to return a custom fallback message for an unresolvable code.
#getDefaultMessage(String)public final java.lang.String getMessage(java.lang.String code,
java.lang.Object[] args,
java.lang.String defaultMessage,
java.util.Locale locale)
MessageSourcegetMessage in interface MessageSourcecode - the code to lookup up, such as 'calculator.noRateSet'. Users of
this class are encouraged to base message names on the relevant fully
qualified class name, thus avoiding conflict and ensuring maximum clarity.args - array of arguments that will be filled in for params within
the message (params look like "{0}", "{1,date}", "{2,time}" within a message),
or null if none.defaultMessage - String to return if the lookup failslocale - the Locale in which to do the lookupMessageFormatpublic final java.lang.String getMessage(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale)
throws NoSuchMessageException
MessageSourcegetMessage in interface MessageSourcecode - the code to lookup up, such as 'calculator.noRateSet'args - Array of arguments that will be filled in for params within
the message (params look like "{0}", "{1,date}", "{2,time}" within a message),
or null if none.locale - the Locale in which to do the lookupNoSuchMessageException - if the message wasn't foundMessageFormatprotected java.lang.String getMessageInternal(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale)
null if not found. Does not fall back to
the code as default message. Invoked by getMessage methods.code - the code to lookup up, such as 'calculator.noRateSet'args - array of arguments that will be filled in for params within the messagelocale - the Locale in which to do the lookupnull if not found#getMessage(String, Object[], String, Locale),
#getMessage(String, Object[], Locale),
#setUseCodeAsDefaultMessageprotected java.lang.String getMessageFromParent(java.lang.String code,
java.lang.Object[] args,
java.util.Locale locale)
code - the code to lookup up, such as 'calculator.noRateSet'args - array of arguments that will be filled in for params within the messagelocale - the Locale in which to do the lookupnull if not found#getParentMessageSource()protected java.lang.String getDefaultMessage(java.lang.String code)
Default is to return the code itself if "useCodeAsDefaultMessage" is activated,
or return no fallback else. In case of no fallback, the caller will usually
receive a NoSuchMessageException from getMessage.
code - the message code that we couldn't resolve and that we didn't receive an explicit default message fornull if none#setUseCodeAsDefaultMessageprotected java.lang.String resolveCodeWithoutArguments(java.lang.String code,
java.util.Locale locale)
The default implementation does use MessageFormat, through
delegating to the resolveCode(java.lang.String, java.util.Locale) method. Subclasses are encouraged
to replace this with optimized resolution.
Unfortunately, java.text.MessageFormat is not implemented
in an efficient fashion. In particular, it does not detect that a message
pattern doesn't contain argument placeholders in the first place. Therefore,
it is advisable to circumvent MessageFormat for messages without arguments.
code - the code of the message to resolvelocale - the Locale to resolve the code for (subclasses are encouraged to support internationalization)null if not found#resolveCode,
MessageFormatprotected abstract java.text.MessageFormat resolveCode(java.lang.String code,
java.util.Locale locale)
Returns a MessageFormat instance rather than a message String, to allow for appropriate caching of MessageFormats in subclasses.
Subclasses are encouraged to provide optimized resolution
for messages without arguments, not involving MessageFormat.
See the resolveCodeWithoutArguments(java.lang.String, java.util.Locale) javadoc for details.
code - the code of the message to resolvelocale - the Locale to resolve the code for (subclasses are encouraged to support internationalization)null if not found#resolveCodeWithoutArguments(String, java.util.Locale)Copyright © 2008–2018 The Aspectran Project. All rights reserved.