diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java index 2d8bc38ae..39a484d7d 100644 --- a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java +++ b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java @@ -53,6 +53,8 @@ public class DefaultActionProxy implements ActionProxy, Serializable { protected ActionConfig config; protected ActionInvocation invocation; protected UnknownHandlerManager unknownHandlerManager; + protected LocalizedTextUtil localizedTextUtil; + protected String actionName; protected String namespace; protected String method; @@ -113,6 +115,11 @@ public class DefaultActionProxy implements ActionProxy, Serializable { this.actionEventListener = listener; } + @Inject + public void setLocalizedTextUtil(LocalizedTextUtil localizedTextUtil) { + this.localizedTextUtil = localizedTextUtil; + } + public Object getAction() { return invocation.getAction(); } @@ -205,7 +212,7 @@ public class DefaultActionProxy implements ActionProxy, Serializable { } protected String prepareNotAllowedErrorMessage() { - return LocalizedTextUtil.findDefaultText( + return localizedTextUtil.findDefaultText( "struts.exception.method-not-allowed", Locale.getDefault(), new String[]{method, actionName} @@ -214,12 +221,12 @@ public class DefaultActionProxy implements ActionProxy, Serializable { protected String getErrorMessage() { if ((namespace != null) && (namespace.trim().length() > 0)) { - return LocalizedTextUtil.findDefaultText( + return localizedTextUtil.findDefaultText( "xwork.exception.missing-package-action", Locale.getDefault(), new String[]{namespace, actionName}); } else { - return LocalizedTextUtil.findDefaultText( + return localizedTextUtil.findDefaultText( "xwork.exception.missing-action", Locale.getDefault(), new String[]{actionName}); diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java index 1d7216168..0e3f5b17b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/DefaultTextProvider.java @@ -15,6 +15,7 @@ */ package com.opensymphony.xwork2; +import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.LocalizedTextUtil; import com.opensymphony.xwork2.util.ValueStack; @@ -37,15 +38,22 @@ public class DefaultTextProvider implements TextProvider, Serializable, Unchaina private static final Object[] EMPTY_ARGS = new Object[0]; + protected LocalizedTextUtil localizedTextUtil; + public DefaultTextProvider() { } + @Inject + public void setLocalizedTextUtil(LocalizedTextUtil localizedTextUtil) { + this.localizedTextUtil = localizedTextUtil; + } + public boolean hasKey(String key) { return getText(key) != null; } public String getText(String key) { - return LocalizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale()); + return localizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale()); } public String getText(String key, String defaultValue) { @@ -64,7 +72,7 @@ public class DefaultTextProvider implements TextProvider, Serializable, Unchaina params = EMPTY_ARGS; } - return LocalizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale(), params); + return localizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale(), params); } public String getText(String key, String[] args) { @@ -75,7 +83,7 @@ public class DefaultTextProvider implements TextProvider, Serializable, Unchaina params = EMPTY_ARGS; } - return LocalizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale(), params); + return localizedTextUtil.findDefaultText(key, ActionContext.getContext().getLocale(), params); } public String getText(String key, String defaultValue, List> args) { @@ -136,7 +144,7 @@ public class DefaultTextProvider implements TextProvider, Serializable, Unchaina } public ResourceBundle getTexts(String bundleName) { - return LocalizedTextUtil.findResourceBundle(bundleName, ActionContext.getContext().getLocale()); + return localizedTextUtil.findResourceBundle(bundleName, ActionContext.getContext().getLocale()); } public ResourceBundle getTexts() { diff --git a/core/src/main/java/com/opensymphony/xwork2/TextProviderSupport.java b/core/src/main/java/com/opensymphony/xwork2/TextProviderSupport.java index 3f2090274..ab37e9233 100644 --- a/core/src/main/java/com/opensymphony/xwork2/TextProviderSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/TextProviderSupport.java @@ -33,6 +33,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { private Class clazz; private LocaleProvider localeProvider; private ResourceBundle bundle; + private LocalizedTextUtil localizedTextUtil; /** * Default constructor @@ -85,6 +86,10 @@ public class TextProviderSupport implements ResourceBundleTextProvider { this.localeProvider = localeProvider; } + @Inject + public void setLocalizedTextUtil(LocalizedTextUtil localizedTextUtil) { + this.localizedTextUtil = localizedTextUtil; + } /** * Checks if a key is available in the resource bundles associated with this action. @@ -97,9 +102,9 @@ public class TextProviderSupport implements ResourceBundleTextProvider { public boolean hasKey(String key) { String message; if (clazz != null) { - message = LocalizedTextUtil.findText(clazz, key, getLocale(), null, new Object[0] ); + message = localizedTextUtil.findText(clazz, key, getLocale(), null, new Object[0] ); } else { - message = LocalizedTextUtil.findText(bundle, key, getLocale(), null, new Object[0]); + message = localizedTextUtil.findText(bundle, key, getLocale(), null, new Object[0]); } return message != null; } @@ -201,9 +206,9 @@ public class TextProviderSupport implements ResourceBundleTextProvider { public String getText(String key, String defaultValue, List> args) { Object[] argsArray = ((args != null && !args.equals(Collections.emptyList())) ? args.toArray() : null); if (clazz != null) { - return LocalizedTextUtil.findText(clazz, key, getLocale(), defaultValue, argsArray); + return localizedTextUtil.findText(clazz, key, getLocale(), defaultValue, argsArray); } else { - return LocalizedTextUtil.findText(bundle, key, getLocale(), defaultValue, argsArray); + return localizedTextUtil.findText(bundle, key, getLocale(), defaultValue, argsArray); } } @@ -222,9 +227,9 @@ public class TextProviderSupport implements ResourceBundleTextProvider { */ public String getText(String key, String defaultValue, String[] args) { if (clazz != null) { - return LocalizedTextUtil.findText(clazz, key, getLocale(), defaultValue, args); + return localizedTextUtil.findText(clazz, key, getLocale(), defaultValue, args); } else { - return LocalizedTextUtil.findText(bundle, key, getLocale(), defaultValue, args); + return localizedTextUtil.findText(bundle, key, getLocale(), defaultValue, args); } } @@ -252,9 +257,9 @@ public class TextProviderSupport implements ResourceBundleTextProvider { locale = getLocale(); } if (clazz != null) { - return LocalizedTextUtil.findText(clazz, key, locale, defaultValue, argsArray, stack); + return localizedTextUtil.findText(clazz, key, locale, defaultValue, argsArray, stack); } else { - return LocalizedTextUtil.findText(bundle, key, locale, defaultValue, argsArray, stack); + return localizedTextUtil.findText(bundle, key, locale, defaultValue, argsArray, stack); } } @@ -282,9 +287,9 @@ public class TextProviderSupport implements ResourceBundleTextProvider { locale = getLocale(); } if (clazz != null) { - return LocalizedTextUtil.findText(clazz, key, locale, defaultValue, args, stack); + return localizedTextUtil.findText(clazz, key, locale, defaultValue, args, stack); } else { - return LocalizedTextUtil.findText(bundle, key, locale, defaultValue, args, stack); + return localizedTextUtil.findText(bundle, key, locale, defaultValue, args, stack); } } @@ -304,7 +309,7 @@ public class TextProviderSupport implements ResourceBundleTextProvider { * @return a resource bundle */ public ResourceBundle getTexts(String aBundleName) { - return LocalizedTextUtil.findResourceBundle(aBundleName, getLocale()); + return localizedTextUtil.findResourceBundle(aBundleName, getLocale()); } /** diff --git a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java index 9dfcd4d7a..771fc367b 100644 --- a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java +++ b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java @@ -194,7 +194,8 @@ public class XWorkConverter extends DefaultTypeConverter { } public static String getConversionErrorMessage(String propertyName, ValueStack stack) { - String defaultMessage = LocalizedTextUtil.findDefaultText("xwork.default.invalid.fieldvalue", + LocalizedTextUtil localizedTextUtil = ActionContext.getContext().getContainer().getInstance(LocalizedTextUtil.class); + String defaultMessage = localizedTextUtil.findDefaultText("xwork.default.invalid.fieldvalue", ActionContext.getContext().getLocale(), new Object[]{ propertyName diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/AliasInterceptor.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/AliasInterceptor.java index a956aeac2..9d260c18d 100644 --- a/core/src/main/java/com/opensymphony/xwork2/interceptor/AliasInterceptor.java +++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/AliasInterceptor.java @@ -94,11 +94,12 @@ public class AliasInterceptor extends AbstractInterceptor { protected String aliasesKey = DEFAULT_ALIAS_KEY; protected ValueStackFactory valueStackFactory; - static boolean devMode = false; + protected LocalizedTextUtil localizedTextUtil; + protected boolean devMode = false; @Inject(XWorkConstants.DEV_MODE) - public static void setDevMode(String mode) { - devMode = "true".equals(mode); + public void setDevMode(String mode) { + this.devMode = Boolean.parseBoolean(mode); } @Inject @@ -106,6 +107,11 @@ public class AliasInterceptor extends AbstractInterceptor { this.valueStackFactory = valueStackFactory; } + @Inject + public void setLocalizedTextUtil(LocalizedTextUtil localizedTextUtil) { + this.localizedTextUtil = localizedTextUtil; + } + /** *
* Sets the name of the action parameter to look for the alias map.
@@ -173,7 +179,7 @@ public class AliasInterceptor extends AbstractInterceptor {
newStack.setValue(alias, value.get());
} catch (RuntimeException e) {
if (devMode) {
- String developerNotification = LocalizedTextUtil.findText(ParametersInterceptor.class, "devmode.notification", ActionContext.getContext().getLocale(), "Developer Notification:\n{0}", new Object[]{
+ String developerNotification = localizedTextUtil.findText(ParametersInterceptor.class, "devmode.notification", ActionContext.getContext().getLocale(), "Developer Notification:\n{0}", new Object[]{
"Unexpected Exception caught setting '" + entry.getKey() + "' on '" + action.getClass() + ": " + e.getMessage()
});
LOG.error(developerNotification);
diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
index c1c52d926..5eba95d71 100644
--- a/core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
+++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/ParametersInterceptor.java
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.interceptor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.XWorkConstants;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.security.AcceptedPatternsChecker;
@@ -218,15 +219,19 @@ public class ParametersInterceptor extends MethodFilterInterceptor {
}
protected void notifyDeveloperParameterException(Object action, String property, String message) {
- String developerNotification = LocalizedTextUtil.findText(ParametersInterceptor.class, "devmode.notification",
- ActionContext.getContext().getLocale(), "Developer Notification:\n{0}",
- new Object[]{
- "Unexpected Exception caught setting '" + property + "' on '" + action.getClass() + ": " + message
- }
- );
+ String developerNotification = "Unexpected Exception caught setting '" + property + "' on '" + action.getClass() + ": " + message;
+ if (action instanceof TextProvider) {
+ TextProvider tp = (TextProvider) action;
+ developerNotification = tp.getText("devmode.notification",
+ "Developer Notification:\n{0}",
+ new String[]{ developerNotification }
+ );
+ }
+
LOG.error(developerNotification);
- // see https://issues.apache.org/jira/browse/WW-4066
+
if (action instanceof ValidationAware) {
+ // see https://issues.apache.org/jira/browse/WW-4066
Collection