From ea92e95461386f1ddfda37bb09ec170b8e306ae7 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Mon, 19 Sep 2016 09:45:16 +0200 Subject: [PATCH] WW-4677 Exyends LocaleProvider to be used to validate Locale --- .../opensymphony/xwork2/ActionSupport.java | 19 ++++++++----- .../xwork2/DefaultLocaleProvider.java | 11 ++++++++ .../opensymphony/xwork2/LocaleProvider.java | 16 +++++++++++ .../validator/DelegatingValidatorContext.java | 22 ++++++++++++++- .../struts2/interceptor/I18nInterceptor.java | 27 ++++++++++++++---- .../xwork2/ActionSupportTest.java | 28 ++++++------------- .../xwork2/CompositeTextProviderTest.java | 20 +++++++++++++ .../xwork2/TextProviderSupportTest.java | 10 +++++++ .../impl/AnnotationXWorkConverterTest.java | 2 ++ .../conversion/impl/XWorkConverterTest.java | 2 ++ .../xwork2/util/LocalizedTextUtilTest.java | 4 +++ .../validator/SimpleActionValidationTest.java | 5 +++- .../StringLengthFieldValidatorTest.java | 2 ++ .../validator/VisitorFieldValidatorTest.java | 1 + .../FileUploadInterceptorTest.java | 3 ++ .../interceptor/I18nInterceptorTest.java | 5 ++-- .../struts2/views/jsp/AbstractTagTest.java | 2 ++ .../apache/struts2/views/jsp/TextTagTest.java | 2 ++ .../struts2/views/jsp/ui/OptGroupTest.java | 1 + 19 files changed, 146 insertions(+), 36 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java index 62f24df5a..012b1f7cf 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java @@ -63,14 +63,19 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex return validationAware.getFieldErrors(); } + @Override public Locale getLocale() { - ActionContext ctx = ActionContext.getContext(); - if (ctx != null) { - return ctx.getLocale(); - } else { - LOG.debug("Action context not initialized"); - return null; - } + return container.getInstance(LocaleProvider.class).getLocale(); + } + + @Override + public boolean isValidLocaleString(String localeStr) { + return container.getInstance(LocaleProvider.class).isValidLocaleString(localeStr); + } + + @Override + public boolean isValidLocale(Locale locale) { + return container.getInstance(LocaleProvider.class).isValidLocale(locale); } public boolean hasKey(String key) { diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java b/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java index 09a4daaa8..1d687bc5c 100644 --- a/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java @@ -1,8 +1,10 @@ package com.opensymphony.xwork2; +import com.opensymphony.xwork2.util.LocalizedTextUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.util.Arrays; import java.util.Locale; /** @@ -22,4 +24,13 @@ public class DefaultLocaleProvider implements LocaleProvider { } } + @Override + public boolean isValidLocaleString(String localeStr) { + return isValidLocale(LocalizedTextUtil.localeFromString(localeStr, getLocale())); + } + + @Override + public boolean isValidLocale(Locale locale) { + return locale != null && Arrays.asList(Locale.getAvailableLocales()).contains(locale); + } } diff --git a/core/src/main/java/com/opensymphony/xwork2/LocaleProvider.java b/core/src/main/java/com/opensymphony/xwork2/LocaleProvider.java index 9584e4e88..9efcfae95 100644 --- a/core/src/main/java/com/opensymphony/xwork2/LocaleProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/LocaleProvider.java @@ -39,4 +39,20 @@ public interface LocaleProvider { */ Locale getLocale(); + /** + * Validates if provided string is a valid {@link Locale} + * + * @param localeStr a String representing locale, e.g. en_EN + * @return true if valid + */ + boolean isValidLocaleString(String localeStr); + + /** + * Validates if provided {@link Locale} is value + * + * @param locale instance of {@link Locale} to validate + * @return true if valid + */ + boolean isValidLocale(Locale locale); + } 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 cf6de26ed..abaa7616e 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java @@ -107,6 +107,16 @@ public class DelegatingValidatorContext implements ValidatorContext { return localeProvider.getLocale(); } + @Override + public boolean isValidLocaleString(String localeStr) { + return localeProvider.isValidLocaleString(localeStr); + } + + @Override + public boolean isValidLocale(Locale locale) { + return localeProvider.isValidLocale(locale); + } + public boolean hasKey(String key) { return textProvider.hasKey(key); } @@ -257,7 +267,17 @@ public class DelegatingValidatorContext implements ValidatorContext { */ private static class ActionContextLocaleProvider implements LocaleProvider { public Locale getLocale() { - return ActionContext.getContext().getLocale(); + return ActionContext.getContext().getInstance(LocaleProvider.class).getLocale(); + } + + @Override + public boolean isValidLocaleString(String localeStr) { + return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocaleString(localeStr); + } + + @Override + public boolean isValidLocale(Locale locale) { + return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocale(locale); } } 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 b7b5d3df5..7467a955b 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,8 @@ package org.apache.struts2.interceptor; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.LocaleProvider; +import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.opensymphony.xwork2.util.LocalizedTextUtil; import org.apache.logging.log4j.LogManager; @@ -102,6 +104,8 @@ public class I18nInterceptor extends AbstractInterceptor { protected String requestOnlyParameterName = DEFAULT_REQUESTONLY_PARAMETER; protected String attributeName = DEFAULT_SESSION_ATTRIBUTE; + protected LocaleProvider localeProvider; + // Request-Only = None protected enum Storage { COOKIE, SESSION, NONE } @@ -123,6 +127,11 @@ public class I18nInterceptor extends AbstractInterceptor { this.attributeName = attributeName; } + @Inject + public void setLocaleProvider(LocaleProvider localeProvider) { + this.localeProvider = localeProvider; + } + @Override public String intercept(ActionInvocation invocation) throws Exception { if (LOG.isDebugEnabled()) { @@ -225,17 +234,25 @@ public class I18nInterceptor extends AbstractInterceptor { protected Locale getLocaleFromParam(Object requestedLocale) { Locale locale = null; if (requestedLocale != null) { - locale = (requestedLocale instanceof Locale) ? - (Locale) requestedLocale : - LocalizedTextUtil.localeFromString(requestedLocale.toString(), null); + if (requestedLocale instanceof Locale) { + locale = (Locale) requestedLocale; + } else { + String localeStr = requestedLocale.toString(); + if (localeProvider.isValidLocaleString(localeStr)) { + locale = LocalizedTextUtil.localeFromString(requestedLocale.toString(), null); + } + } if (locale != null) { LOG.debug("Applied request locale: {}", locale); } } - if (locale != null && !Arrays.asList(Locale.getAvailableLocales()).contains(locale)) { - locale = Locale.getDefault(); + if (!localeProvider.isValidLocale(locale)) { + Locale defaultLocale = localeProvider.getLocale(); + LOG.debug("Provided locale {} isn't valid, fallback to default locale", locale, defaultLocale); + locale = defaultLocale; } + return locale; } diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java index cbbd58bc0..bd47c1c5a 100644 --- a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java @@ -27,11 +27,18 @@ import java.util.*; public class ActionSupportTest extends XWorkTestCase { private ActionSupport as; + private MyActionSupport mas; @Override protected void setUp() throws Exception { super.setUp(); as = new ActionSupport(); + container.inject(as); + + ActionContext.getContext().setLocale(new Locale("da")); + + mas = new MyActionSupport(); + container.inject(mas); } @Override @@ -153,9 +160,6 @@ public class ActionSupportTest extends XWorkTestCase { } public void testMyActionSupport() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - assertEquals("santa", mas.execute()); assertNotNull(mas.getTexts()); @@ -165,9 +169,6 @@ public class ActionSupportTest extends XWorkTestCase { } public void testSimpleGetTexts() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - checkGetTexts(mas); } @@ -199,9 +200,6 @@ public class ActionSupportTest extends XWorkTestCase { } public void testGetTextsWithArgs() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - assertEquals("Hello World", mas.getText("hello", "this is default", "from me")); // no args in bundle assertEquals("Hello World from me", mas.getText("hello.0", "this is default", "from me")); assertEquals("this is default", mas.getText("not.in.bundle", "this is default", "from me")); @@ -211,9 +209,6 @@ public class ActionSupportTest extends XWorkTestCase { } public void testGetTextsWithListArgs() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - List args = new ArrayList<>(); args.add("Santa"); args.add("loud"); @@ -236,9 +231,6 @@ public class ActionSupportTest extends XWorkTestCase { } public void testGetTextsWithArrayArgs() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - String[] args = {"Santa", "loud"}; assertEquals("Hello World", mas.getText("hello", "this is default", args)); // no args in bundle assertEquals("Hello World Santa", mas.getText("hello.0", "this is default", args)); // only 1 arg in bundle @@ -293,16 +285,11 @@ public class ActionSupportTest extends XWorkTestCase { } public void testGetBundle() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); - ResourceBundle rb = ResourceBundle.getBundle(MyActionSupport.class.getName(), new Locale("da")); assertEquals(rb, mas.getTexts(MyActionSupport.class.getName())); } public void testFormattingSupport() throws Exception { - ActionContext.getContext().setLocale(new Locale("da")); - MyActionSupport mas = new MyActionSupport(); ActionContext.getContext().getValueStack().push(mas); mas.setVal(234d); @@ -316,6 +303,7 @@ public class ActionSupportTest extends XWorkTestCase { ActionContext.getContext().getConversionErrors().put("val", new String[]{"4567def"}); ActionContext.getContext().setLocale(new Locale("da")); MyActionSupport mas = new MyActionSupport(); + container.inject(mas); ActionContext.getContext().getValueStack().push(mas); mas.setVal(234d); diff --git a/core/src/test/java/com/opensymphony/xwork2/CompositeTextProviderTest.java b/core/src/test/java/com/opensymphony/xwork2/CompositeTextProviderTest.java index 57788987e..2dcfa8be2 100644 --- a/core/src/test/java/com/opensymphony/xwork2/CompositeTextProviderTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/CompositeTextProviderTest.java @@ -82,12 +82,32 @@ public class CompositeTextProviderTest extends XWorkTestCase { public Locale getLocale() { return Locale.ENGLISH; } + + @Override + public boolean isValidLocaleString(String localeStr) { + return true; + } + + @Override + public boolean isValidLocale(Locale locale) { + return true; + } }), new TextProviderSupport(ResourceBundle.getBundle("com.opensymphony.xwork2.validator.CompositeTextProviderTestResourceBundle2"), new LocaleProvider() { public Locale getLocale() { return Locale.ENGLISH; } + + @Override + public boolean isValidLocaleString(String localeStr) { + return true; + } + + @Override + public boolean isValidLocale(Locale locale) { + return true; + } }) }); diff --git a/core/src/test/java/com/opensymphony/xwork2/TextProviderSupportTest.java b/core/src/test/java/com/opensymphony/xwork2/TextProviderSupportTest.java index cb360f776..6769d0e8e 100644 --- a/core/src/test/java/com/opensymphony/xwork2/TextProviderSupportTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/TextProviderSupportTest.java @@ -112,6 +112,16 @@ public class TextProviderSupportTest extends XWorkTestCase { public Locale getLocale() { return Locale.ENGLISH; } + + @Override + public boolean isValidLocaleString(String localeStr) { + return true; + } + + @Override + public boolean isValidLocale(Locale locale) { + return true; + } }); } diff --git a/core/src/test/java/com/opensymphony/xwork2/conversion/impl/AnnotationXWorkConverterTest.java b/core/src/test/java/com/opensymphony/xwork2/conversion/impl/AnnotationXWorkConverterTest.java index 7302359b5..df84ed109 100644 --- a/core/src/test/java/com/opensymphony/xwork2/conversion/impl/AnnotationXWorkConverterTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/conversion/impl/AnnotationXWorkConverterTest.java @@ -159,6 +159,8 @@ public class AnnotationXWorkConverterTest extends XWorkTestCase { public void testFindConversionErrorMessage() { ModelDrivenAnnotationAction action = new ModelDrivenAnnotationAction(); + container.inject(action); + ValueStack stack = ActionContext.getContext().getValueStack(); stack.push(action); stack.push(action.getModel()); diff --git a/core/src/test/java/com/opensymphony/xwork2/conversion/impl/XWorkConverterTest.java b/core/src/test/java/com/opensymphony/xwork2/conversion/impl/XWorkConverterTest.java index d185c6471..be964164b 100644 --- a/core/src/test/java/com/opensymphony/xwork2/conversion/impl/XWorkConverterTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/conversion/impl/XWorkConverterTest.java @@ -200,6 +200,8 @@ public class XWorkConverterTest extends XWorkTestCase { public void testFindConversionErrorMessage() { ModelDrivenAction action = new ModelDrivenAction(); + container.inject(action); + stack.push(action); stack.push(action.getModel()); diff --git a/core/src/test/java/com/opensymphony/xwork2/util/LocalizedTextUtilTest.java b/core/src/test/java/com/opensymphony/xwork2/util/LocalizedTextUtilTest.java index f09bc9b89..c14d52955 100644 --- a/core/src/test/java/com/opensymphony/xwork2/util/LocalizedTextUtilTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/util/LocalizedTextUtilTest.java @@ -54,6 +54,7 @@ public class LocalizedTextUtilTest extends XWorkTestCase { public void testActionGetTextWithNullObject() throws Exception { MyAction action = new MyAction(); + container.inject(action); Mock mockActionInvocation = new Mock(ActionInvocation.class); mockActionInvocation.expectAndReturn("getAction", action); @@ -78,6 +79,8 @@ public class LocalizedTextUtilTest extends XWorkTestCase { public void testActionGetText() throws Exception { ModelDrivenAction2 action = new ModelDrivenAction2(); + container.inject(action); + TestBean2 bean = (TestBean2) action.getModel(); Bar bar = new Bar(); bean.setBarObj(bar); @@ -100,6 +103,7 @@ public class LocalizedTextUtilTest extends XWorkTestCase { LocalizedTextUtil.addDefaultResourceBundle("com/opensymphony/xwork2/util/FindMe"); SimpleAction action = new SimpleAction(); + container.inject(action); Mock mockActionInvocation = new Mock(ActionInvocation.class); mockActionInvocation.expectAndReturn("getAction", action); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java index 559162e48..33657157d 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/SimpleActionValidationTest.java @@ -150,7 +150,10 @@ public class SimpleActionValidationTest extends XWorkTestCase { String messageKey = "does.not.exist"; validator.setMessageKey(messageKey); - ValidatorContext validatorContext = new DelegatingValidatorContext(new SimpleAction()); + SimpleAction action = new SimpleAction(); + container.inject(action); + + ValidatorContext validatorContext = new DelegatingValidatorContext(action); validator.setValidatorContext(validatorContext); validator.validate(this); assertTrue(validatorContext.hasActionErrors()); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java index 1fae0a9e3..b8cf182c4 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java @@ -154,6 +154,8 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase { super.setUp(); action = new InternalActionSupport(); + container.inject(action); + ValueStack valueStack = ActionContext.getContext().getValueStack(); valueStack.push(action); diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java index 819176799..70e4b3b18 100644 --- a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorFieldValidatorTest.java @@ -36,6 +36,7 @@ public class VisitorFieldValidatorTest extends XWorkTestCase { super.setUp(); action = new VisitorValidatorTestAction(); + container.inject(action); TestBean bean = action.getBean(); Calendar cal = new GregorianCalendar(1900, 01, 01); diff --git a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java index 4b26b8165..ecc624a9a 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java @@ -307,6 +307,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase { assertTrue(ServletFileUpload.isMultipartContent(req)); MyFileupAction action = new MyFileupAction(); + container.inject(action); MockActionInvocation mai = new MockActionInvocation(); mai.setAction(action); mai.setResultCode("success"); @@ -363,6 +364,8 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase { protected void setUp() throws Exception { super.setUp(); action = new TestAction(); + container.inject(action); + interceptor = new FileUploadInterceptor(); container.inject(interceptor); tempDir = File.createTempFile("struts", "fileupload"); diff --git a/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java index 5089be992..68cbfee81 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java @@ -23,6 +23,7 @@ package org.apache.struts2.interceptor; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.DefaultLocaleProvider; import com.opensymphony.xwork2.mock.MockActionInvocation; import junit.framework.TestCase; import org.apache.struts2.ServletActionContext; @@ -181,8 +182,7 @@ public class I18nInterceptorTest extends TestCase { interceptor.intercept(mai); Locale locale = (Locale) session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE); - assertNull(locale); // should not be stored here - locale = mai.getInvocationContext().getLocale(); + assertNotNull(locale); assertEquals(locale1, locale); } @@ -195,6 +195,7 @@ public class I18nInterceptorTest extends TestCase { public void setUp() throws Exception { interceptor = new I18nInterceptor(); + interceptor.setLocaleProvider(new DefaultLocaleProvider()); interceptor.init(); session = new HashMap(); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java index 338793fac..ba10f261d 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/AbstractTagTest.java @@ -86,6 +86,8 @@ public abstract class AbstractTagTest extends StrutsInternalTestCase { protected void createMocks() throws Exception { action = this.getAction(); + container.inject(action); + stack = ActionContext.getContext().getValueStack(); context = stack.getContext(); stack.push(action); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java index ce38d1d90..651fa3db6 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/TextTagTest.java @@ -227,6 +227,7 @@ public class TextTagTest extends AbstractTagTest { ValueStack newStack = container.getInstance(ValueStackFactory.class).createValueStack(); newStack.getContext().put(ActionContext.CONTAINER, container); TestAction testAction = new TestAction(); + container.inject(testAction); testAction.setResult("bar"); newStack.push(testAction); request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack); @@ -247,6 +248,7 @@ public class TextTagTest extends AbstractTagTest { ValueStack newStack = container.getInstance(ValueStackFactory.class).createValueStack(); newStack.getContext().put(ActionContext.CONTAINER, container); TestAction testAction = new TestAction(); + container.inject(testAction); testAction.setResult("bar"); newStack.push(testAction); request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack); diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java index 308abca46..d9b58c1bf 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/OptGroupTest.java @@ -227,6 +227,7 @@ public class OptGroupTest extends AbstractUITagTest { selectTag.setListValueKey("valueKey"); LocaleTestAction localeTestAction = new LocaleTestAction(); + container.inject(localeTestAction); localeTestAction.setText("LocaleKeyValueTest.ONE","Edno"); localeTestAction.setText("LocaleKeyValueTest.TWO","Dve");