java.lang.Object | ||
↳ | org.springframework.context.support.MessageSourceSupport | |
↳ | org.springframework.context.support.AbstractMessageSource |
Known Direct Subclasses |
Abstract implementation of the 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(String, Locale)
method. For efficient resolution of messages without arguments, the
resolveCodeWithoutArguments(String, 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".
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.
[Expand]
Inherited Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.context.support.MessageSourceSupport
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Try to resolve the message.
| |||||||||||
Try to resolve the message.
| |||||||||||
Try to resolve the message using all the attributes contained within the
MessageSourceResolvable argument that was passed in. | |||||||||||
Return the parent of this MessageSource, or
null if none. | |||||||||||
Set the parent that will be used to try to resolve messages
that this object can't resolve.
| |||||||||||
Set whether to use the message code as default message instead of
throwing a NoSuchMessageException.
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Return a fallback default message for the given code, if any.
| |||||||||||
Try to retrieve the given message from the parent MessageSource, if any.
| |||||||||||
Resolve the given code and arguments as message in the given Locale,
returning
null if not found. | |||||||||||
Return whether to use the message code as default message instead of
throwing a NoSuchMessageException.
| |||||||||||
Searches through the given array of objects, finds any MessageSourceResolvable
objects and resolves them.
| |||||||||||
Subclasses must implement this method to resolve a message.
| |||||||||||
Subclasses can override this method to resolve a message without arguments
in an optimized fashion, i.e.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.springframework.context.support.MessageSourceSupport
| |||||||||||
From class
java.lang.Object
| |||||||||||
From interface
org.springframework.context.HierarchicalMessageSource
| |||||||||||
From interface
org.springframework.context.MessageSource
|
Try to resolve the message. Treat as an error if the message can't be found.
code | 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 lookup |
NoSuchMessageException |
---|
Try to resolve the message. Return default message if no message was found.
code | 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 fails |
locale | the Locale in which to do the lookup |
Try to resolve the message using all the attributes contained within the
MessageSourceResolvable
argument that was passed in.
NOTE: We must throw a NoSuchMessageException
on this method
since at the time of calling this method we aren't able to determine if the
defaultMessage
property of the resolvable is null or not.
resolvable | value object storing attributes required to properly resolve a message |
---|---|
locale | the Locale in which to do the lookup |
NoSuchMessageException |
---|
Return the parent of this MessageSource, or null
if none.
Set the parent that will be used to try to resolve messages that this object can't resolve.
parent | 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.
|
---|
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 getMessageInternal(String, Object[], 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.
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 NoSuchMessageException from getMessage
.
code | the message code that we couldn't resolve and that we didn't receive an explicit default message for |
---|
null
if noneTry to retrieve the given message from the parent MessageSource, if any.
code | the code to lookup up, such as 'calculator.noRateSet' |
---|---|
args | array of arguments that will be filled in for params within the message |
locale | the Locale in which to do the lookup |
null
if not foundResolve the given code and arguments as message in the given Locale,
returning 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 message |
locale | the Locale in which to do the lookup |
null
if not foundReturn 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 getDefaultMessage(String)
method to return a custom fallback message for an unresolvable code.
Searches through the given array of objects, finds any MessageSourceResolvable objects and resolves them.
Allows for messages to have MessageSourceResolvables as arguments.
args | array of arguments for a message |
---|---|
locale | the locale to resolve through |
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(String, Locale)
javadoc for details.
code | the code of the message to resolve |
---|---|
locale | the Locale to resolve the code for (subclasses are encouraged to support internationalization) |
null
if not foundSubclasses 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 resolveCode(String, 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 resolve |
---|---|
locale | the Locale to resolve the code for (subclasses are encouraged to support internationalization) |
null
if not found