org.apache.struts.util
Class PropertyMessageResources

java.lang.Object
  extended by org.apache.struts.util.MessageResources
      extended by org.apache.struts.util.PropertyMessageResources
All Implemented Interfaces:
Serializable

public class PropertyMessageResources
extends MessageResources

Concrete subclass of MessageResources that reads message keys and corresponding strings from named property resources in a similar manner (see modes below) that java.util.PropertyResourceBundle does. The base property defines the base property resource name, and must be specified.

IMPLEMENTATION NOTE - This class trades memory for speed by caching all messages located via generalizing the Locale under the original locale as well. This results in specific messages being stored in the message cache more than once, but improves response time on subsequent requests for the same locale + key combination.

Operating Modes

This implementation can be configured to operate in one of three modes:

1. Default Mode

Default mode is the way this implementation has always operated. It searches for a message key for property resources in the following sequence:
      base + "_" + localeLanguage + "_" + localeCountry + "_" + localeVariant
      base + "_" + localeLanguage + "_" + localeCountry
      base + "_" + localeLanguage
      base + "_" + default locale
      base
 

This mode is the default and requires no additional configuration.

2. JSTL Mode

JSTL mode is compatible with how JSTL operates and the default Locale is not used when looking for a message key. JSTL mode searches for a message key for property resources in the following sequence:
      base + "_" + localeLanguage + "_" + localeCountry + "_" + localeVariant
      base + "_" + localeLanguage + "_" + localeCountry
      base + "_" + localeLanguage
      base
 

Configure PropertyMessageResources to operate in this mode by specifying a value of JSTL for the mode key in your struts-config.xml:

      <message-resources parameter="mypackage.MyMessageResources">
          <set-property key="mode" value="JSTL"/>
      </message-resources>
 

3. Resource Mode

Resource mode is compatible with how Java's PropertyResourceBundle operates. Resource mode searches first through the specified Locale's language, country and variant, then through the default Locale's language, country and variant and finally using just the base:
      base + "_" + localeLanguage + "_" + localeCountry + "_" + localeVariant
      base + "_" + localeLanguage + "_" + localeCountry
      base + "_" + localeLanguage
      base + "_" + defaultLanguage + "_" + defaultCountry + "_" + defaultVariant
      base + "_" + defaultLanguage + "_" + defaultCountry
      base + "_" + defaultLanguage
      base
 

Configure PropertyMessageResources to operate in this mode by specifying a value of resource for the mode key in your struts-config.xml:

      <message-resources parameter="mypackage.MyMessageResources">
          <set-property key="mode" value="resource"/>
      </message-resources>
 

Version:
$Rev: 480549 $ $Date: 2006-11-29 06:16:15 -0600 (Wed, 29 Nov 2006) $
See Also:
Serialized Form

Field Summary
protected  HashMap locales
          The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().
protected static Log log
          The Log instance for this class.
protected  HashMap messages
          The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().
 
Fields inherited from class org.apache.struts.util.MessageResources
config, defaultFactory, defaultLocale, factory, formats, returnNull
 
Constructor Summary
PropertyMessageResources(MessageResourcesFactory factory, String config)
          Construct a new PropertyMessageResources according to the specified parameters.
PropertyMessageResources(MessageResourcesFactory factory, String config, boolean returnNull)
          Construct a new PropertyMessageResources according to the specified parameters.
 
Method Summary
 String getMessage(Locale locale, String key)
          Returns a text message for the specified key, for the specified or default Locale.
protected  void loadLocale(String localeKey)
          Load the messages associated with the specified Locale key.
 void setMode(String mode)
          Set the compatibility mode this implementation uses for message lookup.
 
Methods inherited from class org.apache.struts.util.MessageResources
escape, getConfig, getFactory, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessage, getMessageResources, getReturnNull, isEscape, isPresent, isPresent, localeKey, log, log, messageKey, messageKey, setEscape, setReturnNull
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

protected static final Log log
The Log instance for this class.


locales

protected HashMap locales
The set of locale keys for which we have already loaded messages, keyed by the value calculated in localeKey().


messages

protected HashMap messages
The cache of messages we have accumulated over time, keyed by the value calculated in messageKey().

Constructor Detail

PropertyMessageResources

public PropertyMessageResources(MessageResourcesFactory factory,
                                String config)
Construct a new PropertyMessageResources according to the specified parameters.

Parameters:
factory - The MessageResourcesFactory that created us
config - The configuration parameter for this MessageResources

PropertyMessageResources

public PropertyMessageResources(MessageResourcesFactory factory,
                                String config,
                                boolean returnNull)
Construct a new PropertyMessageResources according to the specified parameters.

Parameters:
factory - The MessageResourcesFactory that created us
config - The configuration parameter for this MessageResources
returnNull - The returnNull property we should initialize with
Method Detail

setMode

public void setMode(String mode)
Set the compatibility mode this implementation uses for message lookup.

Parameters:
mode - JSTL for JSTL compatibility, resource for PropertyResourceBundle compatibility or default for Struts backward compatibility.

getMessage

public String getMessage(Locale locale,
                         String key)
Returns a text message for the specified key, for the specified or default Locale. A null string result will be returned by this method if no relevant message resource is found for this key or Locale, if the returnNull property is set. Otherwise, an appropriate error message will be returned.

This method must be implemented by a concrete subclass.

Specified by:
getMessage in class MessageResources
Parameters:
locale - The requested message Locale, or null for the system default Locale
key - The message key to look up
Returns:
text message for the specified key and locale

loadLocale

protected void loadLocale(String localeKey)
Load the messages associated with the specified Locale key. For this implementation, the config property should contain a fully qualified package and resource name, separated by periods, of a series of property resources to be loaded from the class loader that created this PropertyMessageResources instance. This is exactly the same name format you would use when utilizing the java.util.PropertyResourceBundle class.

Parameters:
localeKey - Locale key for the messages to be retrieved


Copyright © 2000-2008 Apache Software Foundation. All Rights Reserved.