You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2017/03/16 10:09:39 UTC

[05/12] struts git commit: Replaces LocaleProvider with LocaleProviderFactory

Replaces LocaleProvider with LocaleProviderFactory


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/4b022bfb
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/4b022bfb
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/4b022bfb

Branch: refs/heads/master
Commit: 4b022bfbe5f575908e61d84de885ca171fcca7f3
Parents: 3b738ad
Author: Lukasz Lenart <lu...@apache.org>
Authored: Wed Mar 15 09:11:31 2017 +0100
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Wed Mar 15 09:11:31 2017 +0100

----------------------------------------------------------------------
 .../com/opensymphony/xwork2/ActionSupport.java    | 18 ++++++++++++++----
 .../xwork2/config/impl/DefaultConfiguration.java  |  2 +-
 .../providers/XWorkConfigurationProvider.java     |  4 +++-
 .../conversion/impl/DefaultTypeConverter.java     |  4 +++-
 .../validator/DelegatingValidatorContext.java     | 18 +++++++++++++++---
 .../java/org/apache/struts2/StrutsConstants.java  |  4 ++++
 .../java/org/apache/struts2/components/I18n.java  |  5 +++--
 .../config/DefaultBeanSelectionProvider.java      | 12 +++++++++---
 .../org/apache/struts2/dispatcher/Dispatcher.java | 13 ++++++++++---
 .../multipart/AbstractMultiPartRequest.java       |  8 +++-----
 .../interceptor/FileUploadInterceptor.java        |  3 ++-
 .../struts2/interceptor/I18nInterceptor.java      |  5 +++--
 core/src/main/resources/struts-default.xml        |  2 +-
 .../struts2/tiles/StrutsTilesLocaleResolver.java  |  5 +++--
 14 files changed, 74 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
index bb7048f..ea4be0d 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java
@@ -19,6 +19,7 @@ import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.interceptor.ValidationAware;
 import com.opensymphony.xwork2.util.ValueStack;
+import net.sf.cglib.core.Local;
 
 import java.io.Serializable;
 import java.util.*;
@@ -32,6 +33,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex
     private final ValidationAwareSupport validationAware = new ValidationAwareSupport();
 
     private transient TextProvider textProvider;
+    private transient LocaleProvider localeProvider;
 
     protected Container container;
 
@@ -61,17 +63,17 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex
 
     @Override
     public Locale getLocale() {
-        return container.getInstance(LocaleProvider.class).getLocale();
+        return getLocaleProvider().getLocale();
     }
 
     @Override
     public boolean isValidLocaleString(String localeStr) {
-        return container.getInstance(LocaleProvider.class).isValidLocaleString(localeStr);
+        return getLocaleProvider().isValidLocaleString(localeStr);
     }
 
     @Override
     public boolean isValidLocale(Locale locale) {
-        return container.getInstance(LocaleProvider.class).isValidLocale(locale);
+        return getLocaleProvider().isValidLocale(locale);
     }
 
     public boolean hasKey(String key) {
@@ -272,7 +274,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex
      *
      * @return reference to field with TextProvider
      */
-    private TextProvider getTextProvider() {
+    protected TextProvider getTextProvider() {
         if (textProvider == null) {
             TextProviderFactory tpf = container.inject(TextProviderFactory.class);
             textProvider = tpf.createInstance(getClass());
@@ -280,6 +282,14 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex
         return textProvider;
     }
 
+    protected LocaleProvider getLocaleProvider() {
+        if (localeProvider == null) {
+            LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class);
+            localeProvider = localeProviderFactory.createLocaleProvider();
+        }
+        return localeProvider;
+    }
+
     @Inject
     public void setContainer(Container container) {
         this.container = container;

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
index 358eb5c..c7c5a92 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java
@@ -264,7 +264,7 @@ public class DefaultConfiguration implements Configuration {
         builder.factory(TextParser.class, OgnlTextParser.class, Scope.SINGLETON);
         builder.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON);
         builder.factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON);
-        builder.factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON);
+        builder.factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON);
 
         builder.factory(ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON);
         builder.factory(PropertyAccessor.class, CompoundRoot.class.getName(), CompoundRootAccessor.class, Scope.SINGLETON);

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
index 853f50e..5c912e1 100644
--- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java
@@ -2,6 +2,8 @@ package com.opensymphony.xwork2.config.providers;
 
 import com.opensymphony.xwork2.ActionProxyFactory;
 import com.opensymphony.xwork2.DefaultActionProxyFactory;
+import com.opensymphony.xwork2.DefaultLocaleProviderFactory;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.TextProviderFactory;
 import com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory;
 import com.opensymphony.xwork2.factory.UnknownHandlerFactory;
@@ -186,7 +188,7 @@ public class XWorkConfigurationProvider implements ConfigurationProvider {
                 .factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON)
                 .factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON)
 
-                .factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON)
+                .factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON)
                 .factory(OgnlUtil.class, Scope.SINGLETON)
                 .factory(CollectionConverter.class, Scope.SINGLETON)
                 .factory(ArrayConverter.class, Scope.SINGLETON)

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java
index 8b3a9a6..f191680 100644
--- a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java
+++ b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java
@@ -32,6 +32,7 @@ package com.opensymphony.xwork2.conversion.impl;
 
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.conversion.TypeConverter;
 import com.opensymphony.xwork2.inject.Container;
 import com.opensymphony.xwork2.inject.Inject;
@@ -349,7 +350,8 @@ public abstract class DefaultTypeConverter implements TypeConverter {
             locale = (Locale) context.get(ActionContext.LOCALE);
         }
         if (locale == null) {
-            locale = container.getInstance(LocaleProvider.class).getLocale();
+            LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class);
+            locale = localeProviderFactory.createLocaleProvider().getLocale();
         }
         return locale;
     }

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java
index 90812bd..b8921e9 100644
--- a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java
+++ b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java
@@ -253,18 +253,30 @@ public class DelegatingValidatorContext implements ValidatorContext {
      * An implementation of LocaleProvider which gets the locale from the action context.
      */
     private static class ActionContextLocaleProvider implements LocaleProvider {
+
+        private LocaleProvider localeProvider;
+
+        private LocaleProvider getLocaleProvider() {
+            if (localeProvider == null) {
+                LocaleProviderFactory localeProviderFactory = ActionContext.getContext().getInstance(LocaleProviderFactory.class);
+                localeProvider = localeProviderFactory.createLocaleProvider();
+            }
+            return localeProvider;
+        }
+
+        @Override
         public Locale getLocale() {
-            return ActionContext.getContext().getInstance(LocaleProvider.class).getLocale();
+            return getLocaleProvider().getLocale();
         }
 
         @Override
         public boolean isValidLocaleString(String localeStr) {
-            return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocaleString(localeStr);
+            return getLocaleProvider().isValidLocaleString(localeStr);
         }
 
         @Override
         public boolean isValidLocale(Locale locale) {
-            return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocale(locale);
+            return getLocaleProvider().isValidLocale(locale);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/StrutsConstants.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java
index 3d898ce..1160d88 100644
--- a/core/src/main/java/org/apache/struts2/StrutsConstants.java
+++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java
@@ -201,8 +201,12 @@ public final class StrutsConstants {
     public static final String STRUTS_XWORKTEXTPROVIDER = "struts.xworkTextProvider";
 
     /** The {@link com.opensymphony.xwork2.LocaleProvider} implementation class */
+    @Deprecated
     public static final String STRUTS_LOCALE_PROVIDER = "struts.localeProvider";
 
+    /** The {@link com.opensymphony.xwork2.LocaleProviderFactory} implementation class */
+    public static final String STRUTS_LOCALE_PROVIDER_FACTORY = "struts.localeProviderFactory";
+
     /** The name of the parameter to create when mapping an id (used by some action mappers) */
 	public static final String STRUTS_ID_PARAMETER_NAME = "struts.mapper.idParameterName";
 	

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/components/I18n.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java
index f934a3e..89e38bb 100644
--- a/core/src/main/java/org/apache/struts2/components/I18n.java
+++ b/core/src/main/java/org/apache/struts2/components/I18n.java
@@ -24,6 +24,7 @@ package org.apache.struts2.components;
 import java.io.Writer;
 import java.util.ResourceBundle;
 
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import org.apache.struts2.views.annotations.StrutsTag;
 import org.apache.struts2.views.annotations.StrutsTagAttribute;
 import org.apache.struts2.StrutsException;
@@ -109,8 +110,8 @@ public class I18n extends Component {
     }
 
     @Inject
-    public void setLocaleProvider(LocaleProvider localeProvider) {
-        this.localeProvider = localeProvider;
+    public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) {
+        this.localeProvider = localeProviderFactory.createLocaleProvider();
     }
 
     public boolean start(Writer writer) {

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
index a89ae9a..a72bd11 100644
--- a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
+++ b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java
@@ -22,6 +22,7 @@
 package org.apache.struts2.config;
 
 import com.opensymphony.xwork2.ActionProxyFactory;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.LocalizedTextProvider;
 import com.opensymphony.xwork2.TextProviderFactory;
 import com.opensymphony.xwork2.factory.UnknownHandlerFactory;
@@ -29,7 +30,6 @@ import com.opensymphony.xwork2.security.AcceptedPatternsChecker;
 import com.opensymphony.xwork2.security.ExcludedPatternsChecker;
 import com.opensymphony.xwork2.FileManager;
 import com.opensymphony.xwork2.FileManagerFactory;
-import com.opensymphony.xwork2.LocaleProvider;
 import com.opensymphony.xwork2.ObjectFactory;
 import com.opensymphony.xwork2.TextProvider;
 import com.opensymphony.xwork2.UnknownHandlerManager;
@@ -221,7 +221,13 @@ import org.apache.struts2.views.velocity.VelocityManager;
  *     <td>com.opensymphony.xwork2.LocaleProvider</td>
  *     <td>struts.localeProvider</td>
  *     <td>singleton</td>
- *     <td>Allows provide custom TextProvider for whole application</td>
+ *     <td>DEPRECATED! Allows provide custom TextProvider for whole application</td>
+ *   </tr>
+ *   <tr>
+ *     <td>com.opensymphony.xwork2.LocaleProviderFactory</td>
+ *     <td>struts.localeProviderFactory</td>
+ *     <td>singleton</td>
+ *     <td>Allows provide custom LocaleProvider for whole application</td>
  *   </tr>
  *   <tr>
  *     <td>org.apache.struts2.components.UrlRenderer</td>
@@ -393,7 +399,7 @@ public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider
 
         alias(TextProvider.class, StrutsConstants.STRUTS_XWORKTEXTPROVIDER, builder, props, Scope.PROTOTYPE);
         alias(TextProviderFactory.class, StrutsConstants.STRUTS_TEXT_PROVIDER_FACTORY, builder, props, Scope.PROTOTYPE);
-        alias(LocaleProvider.class, StrutsConstants.STRUTS_LOCALE_PROVIDER, builder, props);
+        alias(LocaleProviderFactory.class, StrutsConstants.STRUTS_LOCALE_PROVIDER_FACTORY, builder, props);
         alias(LocalizedTextProvider.class, StrutsConstants.STRUTS_LOCALIZED_TEXT_PROVIDER, builder, props);
 
         alias(ActionProxyFactory.class, StrutsConstants.STRUTS_ACTIONPROXYFACTORY, builder, props);

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
index 047238f..b7714be 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -783,9 +783,16 @@ public class Dispatcher {
 
         String content_type = request.getContentType();
         if (content_type != null && content_type.contains("multipart/form-data")) {
-            MultiPartRequest mpr = getMultiPartRequest();
-            LocaleProvider provider = getContainer().getInstance(LocaleProvider.class);
-            request = new MultiPartRequestWrapper(mpr, request, getSaveDir(), provider, disableRequestAttributeValueStackLookup);
+            MultiPartRequest multiPartRequest = getMultiPartRequest();
+            LocaleProviderFactory localeProviderFactory = getContainer().getInstance(LocaleProviderFactory.class);
+
+            request = new MultiPartRequestWrapper(
+                    multiPartRequest,
+                    request,
+                    getSaveDir(),
+                    localeProviderFactory.createLocaleProvider(),
+                    disableRequestAttributeValueStackLookup
+            );
         } else {
             request = new StrutsRequestWrapper(request, disableRequestAttributeValueStackLookup);
         }

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
index 6c3f1f3..cc20523 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java
@@ -1,6 +1,7 @@
 package org.apache.struts2.dispatcher.multipart;
 
 import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.inject.Inject;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -70,12 +71,9 @@ public abstract class AbstractMultiPartRequest implements MultiPartRequest {
         this.maxSize = Long.parseLong(maxSize);
     }
 
-    /**
-     * @param provider Injects the Struts locale provider.
-     */
     @Inject
-    public void setLocaleProvider(LocaleProvider provider) {
-        defaultLocale = provider.getLocale();
+    public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) {
+        defaultLocale = localeProviderFactory.createLocaleProvider().getLocale();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
index a428b53..b00f2e3 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java
@@ -455,7 +455,8 @@ public class FileUploadInterceptor extends AbstractInterceptor {
         if (action instanceof LocaleProvider) {
             localeProvider = (LocaleProvider) action;
         } else {
-            localeProvider = container.getInstance(LocaleProvider.class);
+            LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class);
+            localeProvider = localeProviderFactory.createLocaleProvider();
         }
         return localeProvider;
     }

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
index 4b6c8f5..f97176f 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
@@ -22,6 +22,7 @@ package org.apache.struts2.interceptor;
 
 import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider;
@@ -93,8 +94,8 @@ public class I18nInterceptor extends AbstractInterceptor {
     }
 
     @Inject
-    public void setLocaleProvider(LocaleProvider localeProvider) {
-        this.localeProvider = localeProvider;
+    public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) {
+        this.localeProvider = localeProviderFactory.createLocaleProvider();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/resources/struts-default.xml
----------------------------------------------------------------------
diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml
index 1f516b7..3a4f6ee 100644
--- a/core/src/main/resources/struts-default.xml
+++ b/core/src/main/resources/struts-default.xml
@@ -133,7 +133,7 @@
     <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" class="com.opensymphony.xwork2.TextProviderFactory" scope="prototype" />
     <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" class="com.opensymphony.xwork2.util.DefaultLocalizedTextProvider" scope="singleton" />
     <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" />
-    <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" />
+    <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton" />
 
     <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/>
     <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/>

http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java
----------------------------------------------------------------------
diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java
index 2c0ef9d..e75cd48 100644
--- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java
+++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java
@@ -21,6 +21,7 @@ package org.apache.struts2.tiles;
 
 import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.LocaleProvider;
+import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -46,9 +47,9 @@ public class StrutsTilesLocaleResolver implements LocaleResolver {
             throw new ConfigurationException("There is no ActionContext for current request!");
         }
 
-        LocaleProvider provider = ctx.getInstance(LocaleProvider.class);
+        LocaleProviderFactory localeProviderFactory = ctx.getInstance(LocaleProviderFactory.class);
 
-        return provider.getLocale();
+        return localeProviderFactory.createLocaleProvider().getLocale();
     }
 
 }