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
method. For efficient resolution of messages without arguments, the
resolveCodeWithoutArguments 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".
Supports not only MessageSourceResolvables as primary messages but also resolution of message arguments that are in turn MessageSourceResolvables themselves.
This class does not implement caching of messages per code, thus subclasses can dynamically change messages over time. Subclasses are encouraged to cache their messages in a modification-aware fashion, allowing for hot deployment of updated messages.
resolveCode(String, java.util.Locale) , resolveCodeWithoutArguments(String, java.util.Locale) , setAlwaysUseMessageFormat, java.text.MessageFormat
| Modifier and Type | Field and Description |
|---|---|
| private Properties | |
| private MessageSource | |
| private boolean |
| Access | Constructor and Description |
|---|---|
| public |
| Modifier and Type | Method and Description |
|---|---|
| protected Properties | |
| protected String | Returns: the default message, ornull if nonethe value object to resolve a default message for resolvable, Locale the current locale locale)Get a default message for the given |
| protected String | Returns: the default message to use, ornull if nonethe message code that we couldn't resolve
and that we didn't receive an explicit default message for code)Return a fallback default message for the given code, if any. |
| public final String | getMessage(String
the message code to look up, e.g. 'calculator.noRateSet'.
MessageSource users are encouraged to base message names on qualified class
or package names, avoiding potential conflicts and ensuring maximum clarity. code, Object[] an 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 args, String null if nonea default message to return if the lookup fails defaultMessage, Locale the locale in which to do the lookup locale)Implements org. Try to resolve the message. |
| public final String | getMessage(String
the message code to look up, e.g. 'calculator.noRateSet'.
MessageSource users are encouraged to base message names on qualified class
or package names, avoiding potential conflicts and ensuring maximum clarity. code, Object[] an 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 args, Locale null if nonethe locale in which to do the lookup locale)Implements org. Try to resolve the message. |
| public final String | getMessage(MessageSourceResolvable
the value object storing attributes required to resolve a message
(may include a default message) resolvable, Locale the locale in which to do the lookup locale)Implements org. Try to resolve the message using all the attributes contained within the
Note We must throw a |
| protected String | Returns: the resolved message, ornull if not foundthe code to lookup up, such as 'calculator.noRateSet' code, Object[] array of arguments that will be filled in for params
within the message args, Locale the locale in which to do the lookup locale)Try to retrieve the given message from the parent |
| protected String | Returns: the resolved message, ornull if not foundthe code to lookup up, such as 'calculator.noRateSet' code, Object[] array of arguments that will be filled in for params
within the message args, Locale the locale in which to do the lookup locale)Resolve the given code and arguments as message in the given Locale,
returning |
| public MessageSource | getParentMessageSource()
Implements org. Return the parent of this MessageSource, or |
| protected boolean | isUseCodeAsDefaultMessage()
Return whether to use the message code as default message instead of throwing a NoSuchMessageException. |
| protected Object[] | Returns: an array of arguments with any MessageSourceResolvables resolvedarray of arguments for a message args, Locale the locale to resolve through locale)Overrides org. Searches through the given array of objects, finds any MessageSourceResolvable objects and resolves them. |
| protected abstract MessageFormat | Returns: the MessageFormat for the message, ornull if not foundthe code of the message to resolve code, Locale the locale to resolve the code for
(subclasses are encouraged to support internationalization) locale)Subclasses must implement this method to resolve a message. |
| protected String | Returns: the message String, ornull if not foundthe code of the message to resolve code, Locale the locale to resolve the code for
(subclasses are encouraged to support internationalization) locale)Subclasses can override this method to resolve a message without arguments in an optimized fashion, i.e. to resolve without involving a MessageFormat. |
| public void | setCommonMessages(Properties commonMessages)
Specify locale-independent common messages, with the message code as key and the full message String (may contain argument placeholders) as value. |
| public void | setParentMessageSource(MessageSource
the parent MessageSource that will be used to
resolve messages that this object can't resolve.
May be parent)null, in which case no further resolution is possible.Implements org. Set the parent that will be used to try to resolve messages that this object can't resolve. |
| public void | setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage)
Set whether to use the message code as default message instead of throwing a NoSuchMessageException. |
| commonMessages | back to summary |
|---|---|
| private Properties commonMessages
| |
| parentMessageSource | back to summary |
|---|---|
| private MessageSource parentMessageSource
| |
| useCodeAsDefaultMessage | back to summary |
|---|---|
| private boolean useCodeAsDefaultMessage | |
| AbstractMessageSource | back to summary |
|---|---|
| public AbstractMessageSource() | |
| getCommonMessages | back to summary |
|---|---|
| protected Properties getCommonMessages() Return a Properties object defining locale-independent common messages, if any.
| |
| getDefaultMessage | back to summary |
|---|---|
| protected String getDefaultMessage(MessageSourceResolvable resolvable, Locale locale) Get a default message for the given This implementation fully renders the default message if available,
or just returns the plain default message
| |
| getDefaultMessage | back to summary |
|---|---|
| protected String getDefaultMessage(String code) Return a fallback default message for the given code, if any. 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
| |
| getMessage | back to summary |
|---|---|
| public final String getMessage(String code, Object[] args, String defaultMessage, Locale locale) Implements org. Doc from org. Try to resolve the message. Return default message if no message was found.
| |
| getMessage | back to summary |
|---|---|
| public final String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException Implements org. Doc from org. Try to resolve the message. Treat as an error if the message can't be found.
| |
| getMessage | back to summary |
|---|---|
| public final String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException Implements org. Doc from org. Try to resolve the message using all the attributes contained within the
Note We must throw a
| |
| getMessageFromParent | back to summary |
|---|---|
| protected String getMessageFromParent(String code, Object[] args, Locale locale) Try to retrieve the given message from the parent
| |
| getMessageInternal | back to summary |
|---|---|
| protected String getMessageInternal(String code, Object[] args, Locale locale) Resolve the given code and arguments as message in the given Locale,
returning
| |
| getParentMessageSource | back to summary |
|---|---|
| public MessageSource getParentMessageSource() Implements org. Doc from org. Return the parent of this MessageSource, or | |
| isUseCodeAsDefaultMessage | back to summary |
|---|---|
| protected boolean isUseCodeAsDefaultMessage() Return whether to use the message code as default message instead of throwing a NoSuchMessageException. Useful for development and debugging. Default is "false". Alternatively, consider overriding the
| |
| resolveArguments | back to summary |
|---|---|
| protected Object[] resolveArguments(Object[] args, Locale locale) Overrides org. Searches through the given array of objects, finds any MessageSourceResolvable objects and resolves them. Allows for messages to have MessageSourceResolvables as arguments. | |
| resolveCode | back to summary |
|---|---|
| protected abstract MessageFormat resolveCode(String code, Locale locale) Subclasses must implement this method to resolve a message. 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 | back to summary |
|---|---|
| protected String resolveCodeWithoutArguments(String code, Locale locale) Subclasses can override this method to resolve a message without arguments in an optimized fashion, i.e. to resolve without involving a MessageFormat. The default implementation does use MessageFormat, through
delegating to the Unfortunately,
| |
| setCommonMessages | back to summary |
|---|---|
| public void setCommonMessages(Properties commonMessages) Specify locale-independent common messages, with the message code as key and the full message String (may contain argument placeholders) as value. May also link to an externally defined Properties object, e.g. defined
through a | |
| setParentMessageSource | back to summary |
|---|---|
| public void setParentMessageSource(MessageSource parent) Implements org. Doc from org. Set the parent that will be used to try to resolve messages that this object can't resolve.
| |
| setUseCodeAsDefaultMessage | back to summary |
|---|---|
| public void setUseCodeAsDefaultMessage(boolean useCodeAsDefaultMessage) Set whether to use the message code as default message instead of throwing a NoSuchMessageException. Useful for development and debugging. Default is "false". 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 | |