|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.context.support.AbstractMessageSource
public abstract class AbstractMessageSource
Abstract implementation of HierarchicalMessageSource interface, making it easy to implement a custom MessageSource. Subclasses must implement the abstract resolveCode method.
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, thus subclasses can dynamically change messages over time. Subclasses are encouraged to cache their messages in a modification-aware fashion.
resolveCode(java.lang.String, java.util.Locale)
Field Summary | |
---|---|
protected Log |
logger
|
Constructor Summary | |
---|---|
AbstractMessageSource()
|
Method Summary | |
---|---|
protected MessageFormat |
createMessageFormat(String msg,
Locale locale)
Create a MessageFormat for the given message and Locale. |
String |
getMessage(MessageSourceResolvable resolvable,
Locale locale)
Try to resolve the message using all the attributes contained within the MessageSourceResolvable argument that was passed in. |
String |
getMessage(String code,
Object[] args,
Locale locale)
Try to resolve the message. |
String |
getMessage(String code,
Object[] args,
String defaultMessage,
Locale locale)
Try to resolve the message. |
protected String |
getMessageInternal(String code,
Object[] args,
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 Object[] |
resolveArguments(Object[] args,
Locale locale)
Search through the given array of objects, find any MessageSourceResolvable objects and resolve them. |
protected abstract MessageFormat |
resolveCode(String code,
Locale locale)
Subclasses must implement this method to resolve a message. |
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 a message without involving a MessageFormat. |
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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected final Log logger
Constructor Detail |
---|
public AbstractMessageSource()
Method Detail |
---|
public void setParentMessageSource(MessageSource parent)
HierarchicalMessageSource
setParentMessageSource
in interface HierarchicalMessageSource
parent
- 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()
HierarchicalMessageSource
getParentMessageSource
in interface HierarchicalMessageSource
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
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.
getMessage(String, Object[], Locale)
,
getMessageInternal(java.lang.String, java.lang.Object[], java.util.Locale)
,
FieldError
public final String getMessage(String code, Object[] args, String defaultMessage, Locale locale)
MessageSource
getMessage
in interface MessageSource
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 failslocale
- the Locale in which to do the lookup
public final String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException
MessageSource
getMessage
in interface MessageSource
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
- if the message wasn't foundpublic final String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException
MessageSource
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.
getMessage
in interface MessageSource
resolvable
- value object storing attributes required to properly resolve a messagelocale
- the Locale in which to do the lookup
NoSuchMessageException
- if the message wasn't foundprotected String getMessageInternal(String code, Object[] args, Locale locale)
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.locale
- the Locale in which to do the lookup
getMessage(String, Object[], String, Locale)
,
getMessage(String, Object[], Locale)
,
getMessage(MessageSourceResolvable, Locale)
,
setUseCodeAsDefaultMessage(boolean)
protected String resolveCodeWithoutArguments(String code, Locale locale)
The default implementation does use MessageFormat,
through delegating to the resolveCode
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's advisable to circumvent
MessageFormat completely 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)
resolveCode(java.lang.String, java.util.Locale)
,
MessageFormat
protected Object[] resolveArguments(Object[] args, Locale locale)
Allows for messages to have MessageSourceResolvables as arguments.
args
- array of arguments for a messagelocale
- the locale to resolve through
protected MessageFormat createMessageFormat(String msg, Locale locale)
This implementation creates an empty MessageFormat first, populating it with Locale and pattern afterwards, to stay compatible with J2SE 1.3.
msg
- the message to create a MessageFormat forlocale
- the Locale to create a MessageFormat for
protected abstract MessageFormat resolveCode(String code, 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 resolveCodeWithoutArguments
javadoc for details.
code
- the code of the message to resolvelocale
- the Locale to resolve the code for
(subclasses are encouraged to support internationalization)
resolveCodeWithoutArguments(java.lang.String, java.util.Locale)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |