craigmcc 2002/07/27 16:49:58 Modified: . STATUS src/share/org/apache/struts/actions LookupDispatchAction.java Log: Fix LookupDispatchAction to work when the button labels are generated from other locales. PR: Bugzilla #10322 Bug report submitted by Henning Schmidt <h.schmidt at mkg-bank.de> Patch (thanks!) submitted by Scott Carlson <scott.carlson at yahoo.com> Revision Changes Path 1.45 +2 -3 jakarta-struts/STATUS Index: STATUS =================================================================== RCS file: /home/cvs/jakarta-struts/STATUS,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- STATUS 27 Jul 2002 23:26:08 -0000 1.44 +++ STATUS 27 Jul 2002 23:49:58 -0000 1.45 @@ -6,7 +6,7 @@ OUTSTANDING BUGS IN STRUTS 1.1-b1 AND NIGHTLY BUILDS ==================================================== - 12 open bugs to swat!! + 11 open bugs to swat!! Controller: @@ -36,7 +36,6 @@ Standard Actions: ---------------- -10322 Problems with LookupDispatchAction and other locales Tiles Framework: 1.6 +29 -15 jakarta-struts/src/share/org/apache/struts/actions/LookupDispatchAction.java Index: LookupDispatchAction.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/LookupDispatchAction.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- LookupDispatchAction.java 25 Jun 2002 18:26:15 -0000 1.5 +++ LookupDispatchAction.java 27 Jul 2002 23:49:58 -0000 1.6 @@ -60,6 +60,7 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import javax.servlet.ServletException; @@ -143,6 +144,7 @@ * is found then an exception will be thrown. * *@author Erik Hatcher + *@author Scott Carlson */ public abstract class LookupDispatchAction extends DispatchAction { @@ -150,7 +152,7 @@ /** * Reverse lookup map from resource value to resource key. */ - protected Map lookupMap = null; + protected Map localeMap = new HashMap(); /** * Resource key to method name lookup @@ -198,20 +200,32 @@ throw new ServletException(message); } - if (lookupMap == null) { - // Build the key lookup map - lookupMap = new HashMap(); - MessageResources resources = (MessageResources) - request.getAttribute(Action.MESSAGES_KEY); - - keyMethodMap = getKeyMethodMap(); - - Iterator iter = keyMethodMap.keySet().iterator(); - while (iter.hasNext()) { - String key = (String) iter.next(); - String text = resources.getMessage(key); - if ((text != null) && !lookupMap.containsKey(text)) { - lookupMap.put(text, key); + // Based on this request's Locale get the lookupMap + Map lookupMap = null; + Locale userLocale = getLocale(request); + boolean newLookupMap = false; + synchronized (localeMap) { + lookupMap = (Map) localeMap.get(userLocale); + if (lookupMap == null) { + newLookupMap = true; + lookupMap = new HashMap(); + localeMap.put(userLocale, lookupMap); + } + } + synchronized (lookupMap) { + if (newLookupMap) { + // This is the first time this Locale is used + // Build the reverse lookup Map. + MessageResources resources = (MessageResources) + request.getAttribute(Action.MESSAGES_KEY); + keyMethodMap = getKeyMethodMap(); + Iterator iter = keyMethodMap.keySet().iterator(); + while (iter.hasNext()) { + String key = (String) iter.next(); + String text = resources.getMessage(userLocale, key); + if ((text != null) && !lookupMap.containsKey(text)) { + lookupMap.put(text, key); + } } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>