mirror of
https://github.com/apache/struts.git
synced 2026-08-11 09:36:57 +00:00
Merge branch 'injectable-context' into localized-bean
This commit is contained in:
@@ -274,11 +274,8 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex
|
||||
*/
|
||||
private TextProvider getTextProvider() {
|
||||
if (textProvider == null) {
|
||||
TextProviderFactory tpf = new TextProviderFactory();
|
||||
if (container != null) {
|
||||
container.inject(tpf);
|
||||
}
|
||||
textProvider = tpf.createInstance(getClass(), this);
|
||||
TextProviderFactory tpf = container.inject(TextProviderFactory.class);
|
||||
textProvider = tpf.createInstance(getClass());
|
||||
}
|
||||
return textProvider;
|
||||
}
|
||||
|
||||
@@ -28,44 +28,49 @@ import java.util.ResourceBundle;
|
||||
public class TextProviderFactory {
|
||||
|
||||
private TextProvider textProvider;
|
||||
private LocaleProvider localeProvider;
|
||||
|
||||
@Inject
|
||||
public void setTextProvider(TextProvider textProvider) {
|
||||
this.textProvider = textProvider;
|
||||
}
|
||||
|
||||
public TextProvider createInstance(Class clazz, LocaleProvider provider) {
|
||||
TextProvider instance = getTextProvider(clazz, provider);
|
||||
@Inject
|
||||
public void setLocaleProvider(LocaleProvider localeProvider) {
|
||||
this.localeProvider = localeProvider;
|
||||
}
|
||||
|
||||
public TextProvider createInstance(Class clazz) {
|
||||
TextProvider instance = getTextProvider(clazz);
|
||||
if (instance instanceof ResourceBundleTextProvider) {
|
||||
((ResourceBundleTextProvider) instance).setClazz(clazz);
|
||||
((ResourceBundleTextProvider) instance).setLocaleProvider(provider);
|
||||
((ResourceBundleTextProvider) instance).setLocaleProvider(localeProvider);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public TextProvider createInstance(ResourceBundle bundle, LocaleProvider provider) {
|
||||
TextProvider instance = getTextProvider(bundle, provider);
|
||||
public TextProvider createInstance(ResourceBundle bundle) {
|
||||
TextProvider instance = getTextProvider(bundle);
|
||||
if (instance instanceof ResourceBundleTextProvider) {
|
||||
((ResourceBundleTextProvider) instance).setBundle(bundle);
|
||||
((ResourceBundleTextProvider) instance).setLocaleProvider(provider);
|
||||
((ResourceBundleTextProvider) instance).setLocaleProvider(localeProvider);
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
protected TextProvider getTextProvider(Class clazz, LocaleProvider provider) {
|
||||
protected TextProvider getTextProvider(Class clazz) {
|
||||
if (this.textProvider == null) {
|
||||
return new TextProviderSupport(clazz, provider);
|
||||
return new TextProviderSupport(clazz, localeProvider);
|
||||
} else {
|
||||
return textProvider;
|
||||
}
|
||||
}
|
||||
|
||||
private TextProvider getTextProvider(ResourceBundle bundle, LocaleProvider provider) {
|
||||
private TextProvider getTextProvider(ResourceBundle bundle) {
|
||||
if (this.textProvider == null) {
|
||||
return new TextProviderSupport(bundle, provider);
|
||||
} else {
|
||||
return textProvider;
|
||||
textProvider = new TextProviderSupport(bundle, localeProvider);
|
||||
}
|
||||
return textProvider;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+4
@@ -2,6 +2,7 @@ package com.opensymphony.xwork2.config.providers;
|
||||
|
||||
import com.opensymphony.xwork2.ActionProxyFactory;
|
||||
import com.opensymphony.xwork2.DefaultActionProxyFactory;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory;
|
||||
import com.opensymphony.xwork2.factory.UnknownHandlerFactory;
|
||||
import com.opensymphony.xwork2.ognl.accessor.HttpParametersPropertyAccessor;
|
||||
@@ -178,9 +179,12 @@ public class XWorkConfigurationProvider implements ConfigurationProvider {
|
||||
.factory(NullHandler.class, Object.class.getName(), InstantiatingNullHandler.class, Scope.SINGLETON)
|
||||
.factory(ActionValidatorManager.class, AnnotationActionValidatorManager.class, Scope.SINGLETON)
|
||||
.factory(ActionValidatorManager.class, "no-annotations", DefaultActionValidatorManager.class, Scope.SINGLETON)
|
||||
|
||||
.factory(TextProviderFactory.class, Scope.SINGLETON)
|
||||
.factory(LocalizedTextUtil.class, LocalizedTextUtil.class, Scope.SINGLETON)
|
||||
.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON)
|
||||
.factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON)
|
||||
|
||||
.factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON)
|
||||
.factory(OgnlUtil.class, Scope.SINGLETON)
|
||||
.factory(CollectionConverter.class, Scope.SINGLETON)
|
||||
|
||||
+7
-1
@@ -52,6 +52,7 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager
|
||||
private ValidatorFileParser validatorFileParser;
|
||||
private FileManager fileManager;
|
||||
private boolean reloadingConfigs;
|
||||
private TextProviderFactory textProviderFactory;
|
||||
|
||||
@Inject
|
||||
public void setValidatorFactory(ValidatorFactory fac) {
|
||||
@@ -73,6 +74,11 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager
|
||||
this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTextProviderFactory(TextProviderFactory textProviderFactory) {
|
||||
this.textProviderFactory = textProviderFactory;
|
||||
}
|
||||
|
||||
public List<Validator> getValidators(Class clazz, String context) {
|
||||
return getValidators(clazz, context, null);
|
||||
}
|
||||
@@ -116,7 +122,7 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager
|
||||
}
|
||||
|
||||
public void validate(Object object, String context, String method) throws ValidationException {
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(object);
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(object, textProviderFactory);
|
||||
validate(object, context, validatorContext, method);
|
||||
}
|
||||
|
||||
|
||||
+11
-2
@@ -18,6 +18,7 @@ package com.opensymphony.xwork2.validator;
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.FileManager;
|
||||
import com.opensymphony.xwork2.FileManagerFactory;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkConstants;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.util.ClassLoaderUtil;
|
||||
@@ -50,16 +51,19 @@ import java.util.*;
|
||||
*/
|
||||
public class DefaultActionValidatorManager implements ActionValidatorManager {
|
||||
|
||||
private final static Logger LOG = LogManager.getLogger(DefaultActionValidatorManager.class);
|
||||
|
||||
/** The file suffix for any validation file. */
|
||||
protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml";
|
||||
|
||||
private final Map<String, List<ValidatorConfig>> validatorCache = Collections.synchronizedMap(new HashMap<String, List<ValidatorConfig>>());
|
||||
private final Map<String, List<ValidatorConfig>> validatorFileCache = Collections.synchronizedMap(new HashMap<String, List<ValidatorConfig>>());
|
||||
private final Logger LOG = LogManager.getLogger(DefaultActionValidatorManager.class);
|
||||
|
||||
private ValidatorFactory validatorFactory;
|
||||
private ValidatorFileParser validatorFileParser;
|
||||
private FileManager fileManager;
|
||||
private boolean reloadingConfigs;
|
||||
private TextProviderFactory textProviderFactory;
|
||||
|
||||
@Inject
|
||||
public void setValidatorFileParser(ValidatorFileParser parser) {
|
||||
@@ -81,6 +85,11 @@ public class DefaultActionValidatorManager implements ActionValidatorManager {
|
||||
this.reloadingConfigs = Boolean.parseBoolean(reloadingConfigs);
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTextProviderFactory(TextProviderFactory textProviderFactory) {
|
||||
this.textProviderFactory = textProviderFactory;
|
||||
}
|
||||
|
||||
public synchronized List<Validator> getValidators(Class clazz, String context) {
|
||||
return getValidators(clazz, context, null);
|
||||
}
|
||||
@@ -118,7 +127,7 @@ public class DefaultActionValidatorManager implements ActionValidatorManager {
|
||||
}
|
||||
|
||||
public void validate(Object object, String context, String method) throws ValidationException {
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(object);
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(object, textProviderFactory);
|
||||
validate(object, context, validatorContext, method);
|
||||
}
|
||||
|
||||
|
||||
+7
-26
@@ -56,14 +56,11 @@ public class DelegatingValidatorContext implements ValidatorContext {
|
||||
* (validation aware instance and a locale and text provider) are created based on the given action.
|
||||
*
|
||||
* @param object the object to use for validation (usually an Action).
|
||||
*
|
||||
* @deprecated will be removed, do not use!
|
||||
*/
|
||||
@Deprecated
|
||||
public DelegatingValidatorContext(Object object) {
|
||||
public DelegatingValidatorContext(Object object, TextProviderFactory textProviderFactory) {
|
||||
this.localeProvider = makeLocaleProvider(object);
|
||||
this.validationAware = makeValidationAware(object);
|
||||
this.textProvider = makeTextProvider(object, localeProvider);
|
||||
this.textProvider = makeTextProvider(object, textProviderFactory);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -77,7 +74,7 @@ public class DelegatingValidatorContext implements ValidatorContext {
|
||||
@Deprecated
|
||||
public DelegatingValidatorContext(Class clazz) {
|
||||
localeProvider = new ActionContextLocaleProvider();
|
||||
textProvider = new TextProviderFactory().createInstance(clazz, localeProvider);
|
||||
textProvider = new TextProviderFactory().createInstance(clazz);
|
||||
validationAware = new LoggingValidationAware(clazz);
|
||||
}
|
||||
|
||||
@@ -199,18 +196,11 @@ public class DelegatingValidatorContext implements ValidatorContext {
|
||||
return validationAware.hasFieldErrors();
|
||||
}
|
||||
|
||||
public static TextProvider makeTextProvider(Object object, LocaleProvider localeProvider) {
|
||||
public TextProvider makeTextProvider(Object object, TextProviderFactory textProviderFactory) {
|
||||
// the object argument passed through here will most probably be an ActionSupport descendant which does
|
||||
// implements TextProvider.
|
||||
if (object != null && object instanceof DelegatingValidatorContext) {
|
||||
return ((DelegatingValidatorContext) object).getTextProvider();
|
||||
} else if (object != null && localeProvider != null && localeProvider instanceof DelegatingValidatorContext) {
|
||||
return new CompositeTextProvider(new TextProvider[]{
|
||||
new TextProviderFactory().createInstance(object.getClass(), localeProvider),
|
||||
((DelegatingValidatorContext)localeProvider).getTextProvider()
|
||||
});
|
||||
} else if (localeProvider != null && localeProvider instanceof DelegatingValidatorContext) {
|
||||
return ((DelegatingValidatorContext)localeProvider).getTextProvider();
|
||||
}
|
||||
|
||||
if ((object != null) && (object instanceof TextProvider)) {
|
||||
@@ -219,20 +209,11 @@ public class DelegatingValidatorContext implements ValidatorContext {
|
||||
}
|
||||
return new CompositeTextProvider(new TextProvider[]{
|
||||
((TextProvider) object),
|
||||
new TextProviderSupport(object.getClass(), localeProvider)
|
||||
});
|
||||
} else if (localeProvider != null && localeProvider instanceof TextProvider) {
|
||||
if (localeProvider instanceof CompositeTextProvider) {
|
||||
return (CompositeTextProvider) localeProvider;
|
||||
}
|
||||
return new CompositeTextProvider(new TextProvider[]{
|
||||
((TextProvider) localeProvider),
|
||||
new TextProviderSupport(localeProvider.getClass(), localeProvider)
|
||||
textProviderFactory.createInstance(object.getClass())
|
||||
});
|
||||
} else {
|
||||
return new TextProviderFactory().createInstance(
|
||||
object != null ? object.getClass() : DelegatingValidatorContext.class,
|
||||
localeProvider);
|
||||
return textProviderFactory.createInstance(
|
||||
object != null ? object.getClass() : DelegatingValidatorContext.class);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+9
-1
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.util.TextParseUtil;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.*;
|
||||
@@ -45,6 +47,12 @@ public abstract class ValidatorSupport implements Validator, ShortCircuitableVal
|
||||
private String[] messageParameters;
|
||||
protected ValueStack stack;
|
||||
|
||||
protected TextProviderFactory textProviderFactory;
|
||||
|
||||
@Inject
|
||||
public void setTextProviderFactory(TextProviderFactory textProviderFactory) {
|
||||
this.textProviderFactory = textProviderFactory;
|
||||
}
|
||||
|
||||
public void setValueStack(ValueStack stack) {
|
||||
this.stack = stack;
|
||||
@@ -76,7 +84,7 @@ public abstract class ValidatorSupport implements Validator, ShortCircuitableVal
|
||||
defaultMessage = messageKey;
|
||||
}
|
||||
if (validatorContext == null) {
|
||||
validatorContext = new DelegatingValidatorContext(object);
|
||||
validatorContext = new DelegatingValidatorContext(object, textProviderFactory);
|
||||
}
|
||||
List<Object> parsedMessageParameters = null;
|
||||
if (messageParameters != null) {
|
||||
|
||||
+21
-4
@@ -16,6 +16,8 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.CompositeTextProvider;
|
||||
import com.opensymphony.xwork2.TextProvider;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.ActionValidatorManager;
|
||||
@@ -24,6 +26,8 @@ import com.opensymphony.xwork2.validator.ValidationException;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
@@ -166,24 +170,37 @@ public class VisitorFieldValidator extends FieldValidatorSupport {
|
||||
ValidatorContext validatorContext;
|
||||
|
||||
if (appendPrefix) {
|
||||
validatorContext = new AppendingValidatorContext(getValidatorContext(), o, fieldName, getMessage(o));
|
||||
ValidatorContext parent = getValidatorContext();
|
||||
validatorContext = new AppendingValidatorContext(parent, createTextProvider(o, parent), fieldName, getMessage(o));
|
||||
} else {
|
||||
ValidatorContext parent = getValidatorContext();
|
||||
validatorContext = new DelegatingValidatorContext(parent, DelegatingValidatorContext.makeTextProvider(o, parent), parent);
|
||||
CompositeTextProvider textProvider = createTextProvider(o, parent);
|
||||
validatorContext = new DelegatingValidatorContext(parent, textProvider, parent);
|
||||
}
|
||||
|
||||
actionValidatorManager.validate(o, visitorContext, validatorContext);
|
||||
stack.pop();
|
||||
}
|
||||
|
||||
private CompositeTextProvider createTextProvider(Object o, ValidatorContext parent) {
|
||||
List<TextProvider> textProviders = new LinkedList<>();
|
||||
if (o instanceof TextProvider) {
|
||||
textProviders.add((TextProvider) o);
|
||||
} else {
|
||||
textProviders.add(textProviderFactory.createInstance(o.getClass()));
|
||||
}
|
||||
textProviders.add(parent);
|
||||
|
||||
return new CompositeTextProvider(textProviders);
|
||||
}
|
||||
|
||||
public static class AppendingValidatorContext extends DelegatingValidatorContext {
|
||||
private String field;
|
||||
private String message;
|
||||
private ValidatorContext parent;
|
||||
|
||||
public AppendingValidatorContext(ValidatorContext parent, Object object, String field, String message) {
|
||||
super(parent, makeTextProvider(object, parent), parent);
|
||||
public AppendingValidatorContext(ValidatorContext parent, TextProvider textProvider, String field, String message) {
|
||||
super(parent, textProvider, parent);
|
||||
|
||||
this.field = field;
|
||||
this.message = message;
|
||||
|
||||
@@ -307,5 +307,7 @@ public final class StrutsConstants {
|
||||
|
||||
public static final String STRUTS_SMI_METHOD_REGEX = "struts.strictMethodInvocation.methodRegex";
|
||||
|
||||
public static final String STRUTS_TEXT_PROVIDER_FACTORY = "struts.textProviderFactory";
|
||||
|
||||
public static final String STRUTS_LOCALIZED_TEXT_PROVIDER = "struts.localizedTextProvider";
|
||||
}
|
||||
|
||||
@@ -125,9 +125,8 @@ public class I18n extends Component {
|
||||
}
|
||||
|
||||
if (bundle != null) {
|
||||
TextProviderFactory tpf = new TextProviderFactory();
|
||||
container.inject(tpf);
|
||||
textProvider = tpf.createInstance(bundle, localeProvider);
|
||||
TextProviderFactory tpf = container.inject(TextProviderFactory.class);
|
||||
textProvider = tpf.createInstance(bundle);
|
||||
getStack().push(textProvider);
|
||||
pushed = true;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
package org.apache.struts2.config;
|
||||
|
||||
import com.opensymphony.xwork2.ActionProxyFactory;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.factory.UnknownHandlerFactory;
|
||||
import com.opensymphony.xwork2.security.AcceptedPatternsChecker;
|
||||
import com.opensymphony.xwork2.security.ExcludedPatternsChecker;
|
||||
@@ -387,6 +388,7 @@ public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider
|
||||
alias(TypeConverterHolder.class, StrutsConstants.STRUTS_CONVERTER_HOLDER, builder, props);
|
||||
|
||||
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(LocalizedTextUtil.class, StrutsConstants.STRUTS_LOCALIZED_TEXT_PROVIDER, builder, props);
|
||||
|
||||
|
||||
@@ -446,12 +446,8 @@ public class FileUploadInterceptor extends AbstractInterceptor {
|
||||
}
|
||||
|
||||
private TextProvider getTextProvider(Object action) {
|
||||
TextProviderFactory tpf = new TextProviderFactory();
|
||||
if (container != null) {
|
||||
container.inject(tpf);
|
||||
}
|
||||
LocaleProvider localeProvider = getLocaleProvider(action);
|
||||
return tpf.createInstance(action.getClass(), localeProvider);
|
||||
TextProviderFactory tpf = container.inject(TextProviderFactory.class);
|
||||
return tpf.createInstance(action.getClass());
|
||||
}
|
||||
|
||||
private LocaleProvider getLocaleProvider(Object action) {
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
<bean type="com.opensymphony.xwork2.conversion.impl.NumberConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.NumberConverter" scope="singleton"/>
|
||||
<bean type="com.opensymphony.xwork2.conversion.impl.StringConverter" name="struts" class="com.opensymphony.xwork2.conversion.impl.StringConverter" scope="singleton"/>
|
||||
|
||||
<bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" class="com.opensymphony.xwork2.TextProviderFactory" scope="prototype" />
|
||||
<bean type="com.opensymphony.xwork2.util.LocalizedTextUtil" name="struts" class="com.opensymphony.xwork2.util.LocalizedTextUtil" 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" />
|
||||
|
||||
@@ -252,7 +252,7 @@ public class ActionSupportTest extends XWorkTestCase {
|
||||
|
||||
public void testGetTextsWithListAndStack() throws Exception {
|
||||
ActionContext.getContext().setLocale(new Locale("da"));
|
||||
MyActionSupport mas = new MyActionSupport();
|
||||
MyActionSupport mas = container.inject(MyActionSupport.class);
|
||||
|
||||
ValueStack stack = ActionContext.getContext().getValueStack();
|
||||
|
||||
@@ -270,7 +270,7 @@ public class ActionSupportTest extends XWorkTestCase {
|
||||
|
||||
public void testGetTextsWithArrayAndStack() throws Exception {
|
||||
ActionContext.getContext().setLocale(new Locale("da"));
|
||||
MyActionSupport mas = new MyActionSupport();
|
||||
MyActionSupport mas = container.inject(MyActionSupport.class);
|
||||
|
||||
ValueStack stack = ActionContext.getContext().getValueStack();
|
||||
|
||||
@@ -313,7 +313,7 @@ public class ActionSupportTest extends XWorkTestCase {
|
||||
assertEquals("4567def", formatted);
|
||||
}
|
||||
|
||||
private class MyActionSupport extends ActionSupport {
|
||||
public static class MyActionSupport extends ActionSupport {
|
||||
|
||||
private Double val;
|
||||
|
||||
|
||||
+18
-16
@@ -26,47 +26,47 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
/* MockAction.class */
|
||||
// reference number
|
||||
ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack();
|
||||
final RequiredStringValidator referenceNumberRequiredStringValidator = new RequiredStringValidator();
|
||||
final RequiredStringValidator referenceNumberRequiredStringValidator = container.inject(RequiredStringValidator.class);
|
||||
referenceNumberRequiredStringValidator.setFieldName("referenceNumber");
|
||||
referenceNumberRequiredStringValidator.setDefaultMessage("Reference number is required");
|
||||
referenceNumberRequiredStringValidator.setValueStack(stack);
|
||||
|
||||
// order
|
||||
final RequiredFieldValidator orderRequiredValidator = new RequiredFieldValidator();
|
||||
final RequiredFieldValidator orderRequiredValidator = container.inject(RequiredFieldValidator.class);
|
||||
orderRequiredValidator.setFieldName("order");
|
||||
orderRequiredValidator.setDefaultMessage("Order is required");
|
||||
orderRequiredValidator.setValueStack(stack);
|
||||
|
||||
// customer
|
||||
final RequiredFieldValidator customerRequiredValidator = new RequiredFieldValidator();
|
||||
final RequiredFieldValidator customerRequiredValidator = container.inject(RequiredFieldValidator.class);
|
||||
customerRequiredValidator.setFieldName("customer");
|
||||
customerRequiredValidator.setDefaultMessage("Customer is required");
|
||||
customerRequiredValidator.setValueStack(stack);
|
||||
final VisitorFieldValidator customerVisitorValidator = new VisitorFieldValidator();
|
||||
final VisitorFieldValidator customerVisitorValidator = container.inject(VisitorFieldValidator.class);
|
||||
customerVisitorValidator.setAppendPrefix(true);
|
||||
customerVisitorValidator.setFieldName("customer");
|
||||
customerVisitorValidator.setValueStack(stack);
|
||||
|
||||
/* Customer.class */
|
||||
// customer -> name
|
||||
final RequiredStringValidator customerNameRequiredStringValidator = new RequiredStringValidator();
|
||||
final RequiredStringValidator customerNameRequiredStringValidator = container.inject(RequiredStringValidator.class);
|
||||
customerNameRequiredStringValidator.setFieldName("name");
|
||||
customerNameRequiredStringValidator.setDefaultMessage("Name is required");
|
||||
customerNameRequiredStringValidator.setValueStack(stack);
|
||||
|
||||
// customer -> age
|
||||
final RequiredFieldValidator customerAgeRequiredValidator = new RequiredFieldValidator();
|
||||
final RequiredFieldValidator customerAgeRequiredValidator = container.inject(RequiredFieldValidator.class);
|
||||
customerAgeRequiredValidator.setFieldName("age");
|
||||
customerAgeRequiredValidator.setDefaultMessage("Age is required");
|
||||
customerAgeRequiredValidator.setValueStack(stack);
|
||||
|
||||
// customer -> Address
|
||||
final RequiredFieldValidator customerAddressRequiredFieldValidator = new RequiredFieldValidator();
|
||||
final RequiredFieldValidator customerAddressRequiredFieldValidator = container.inject(RequiredFieldValidator.class);
|
||||
customerAddressRequiredFieldValidator.setFieldName("address");
|
||||
customerAddressRequiredFieldValidator.setDefaultMessage("Address is required");
|
||||
customerAddressRequiredFieldValidator.setValueStack(stack);
|
||||
|
||||
final VisitorFieldValidator customerAddressVisitorFieldValidator = new VisitorFieldValidator();
|
||||
final VisitorFieldValidator customerAddressVisitorFieldValidator = container.inject(VisitorFieldValidator.class);
|
||||
customerAddressVisitorFieldValidator.setFieldName("address");
|
||||
customerAddressVisitorFieldValidator.setAppendPrefix(true);
|
||||
//customerAddressVisitorFieldValidator.setDefaultMessage("");
|
||||
@@ -76,26 +76,26 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
|
||||
/* Address.class */
|
||||
// customer -> Address -> street
|
||||
final RequiredStringValidator customerAddressStreetRequiredFieldValidator = new RequiredStringValidator();
|
||||
final RequiredStringValidator customerAddressStreetRequiredFieldValidator = container.inject(RequiredStringValidator.class);
|
||||
customerAddressStreetRequiredFieldValidator.setFieldName("street");
|
||||
customerAddressStreetRequiredFieldValidator.setDefaultMessage("Street is required");
|
||||
customerAddressStreetRequiredFieldValidator.setShortCircuit(true);
|
||||
customerAddressStreetRequiredFieldValidator.setValueStack(stack);
|
||||
|
||||
final RequiredStringValidator customerAddressStreetRequiredFieldValidator2 = new RequiredStringValidator();
|
||||
final RequiredStringValidator customerAddressStreetRequiredFieldValidator2 = container.inject(RequiredStringValidator.class);
|
||||
customerAddressStreetRequiredFieldValidator2.setFieldName("street");
|
||||
customerAddressStreetRequiredFieldValidator2.setDefaultMessage("Street is required 2");
|
||||
customerAddressStreetRequiredFieldValidator2.setShortCircuit(true);
|
||||
customerAddressStreetRequiredFieldValidator2.setValueStack(stack);
|
||||
|
||||
// customer -> Address -> pobox
|
||||
final RequiredStringValidator customerAddressPoboxRequiredFieldValidator = new RequiredStringValidator();
|
||||
final RequiredStringValidator customerAddressPoboxRequiredFieldValidator = container.inject(RequiredStringValidator.class);
|
||||
customerAddressPoboxRequiredFieldValidator.setFieldName("pobox");
|
||||
customerAddressPoboxRequiredFieldValidator.setDefaultMessage("PO Box is required");
|
||||
customerAddressPoboxRequiredFieldValidator.setShortCircuit(false);
|
||||
customerAddressPoboxRequiredFieldValidator.setValueStack(stack);
|
||||
|
||||
final RequiredStringValidator customerAddressPoboxRequiredFieldValidator2 = new RequiredStringValidator();
|
||||
final RequiredStringValidator customerAddressPoboxRequiredFieldValidator2 = container.inject(RequiredStringValidator.class);
|
||||
customerAddressPoboxRequiredFieldValidator2.setFieldName("pobox");
|
||||
customerAddressPoboxRequiredFieldValidator2.setDefaultMessage("PO Box is required 2");
|
||||
customerAddressPoboxRequiredFieldValidator2.setShortCircuit(false);
|
||||
@@ -146,10 +146,12 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
};
|
||||
container.inject(validatorManager);
|
||||
|
||||
customerVisitorValidator.setActionValidatorManager(validatorManager);
|
||||
customerAddressVisitorFieldValidator.setActionValidatorManager(validatorManager);
|
||||
|
||||
MockAction action = new MockAction();
|
||||
MockAction action = container.inject(MockAction.class);
|
||||
stack.push(action);
|
||||
validatorManager.validate(action, "ctx");
|
||||
|
||||
@@ -170,7 +172,7 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
assertEquals((action.getFieldErrors().get("customer.address.pobox")).size(), 2);
|
||||
}
|
||||
|
||||
private class MockAction extends ActionSupport {
|
||||
public static class MockAction extends ActionSupport {
|
||||
|
||||
private String referenceNumber;
|
||||
private Integer order;
|
||||
@@ -188,7 +190,7 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
}
|
||||
|
||||
|
||||
private class Customer {
|
||||
public static class Customer {
|
||||
private String name;
|
||||
private Integer age;
|
||||
private Address address = new Address();
|
||||
@@ -203,7 +205,7 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
|
||||
public void setAddress(Address address) { this.address = address; }
|
||||
}
|
||||
|
||||
private class Address {
|
||||
public static class Address {
|
||||
private String street;
|
||||
private String pobox;
|
||||
|
||||
|
||||
+12
-8
@@ -24,6 +24,7 @@ import com.opensymphony.xwork2.FileManager;
|
||||
import com.opensymphony.xwork2.FileManagerFactory;
|
||||
import com.opensymphony.xwork2.SimpleAction;
|
||||
import com.opensymphony.xwork2.SimpleAnnotationAction;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.config.entities.ActionConfig;
|
||||
import com.opensymphony.xwork2.test.AnnotationDataAware2;
|
||||
@@ -58,6 +59,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
protected final String alias = "annotationValidationAlias";
|
||||
|
||||
AnnotationActionValidatorManager annotationActionValidatorManager;
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
@Override protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
@@ -78,6 +80,8 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
EasyMock.replay(proxy);
|
||||
|
||||
ActionContext.getContext().setActionInvocation(invocation);
|
||||
|
||||
tpf = container.getInstance(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
@Override protected void tearDown() throws Exception {
|
||||
@@ -124,7 +128,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
bean.setName("foo");
|
||||
bean.setCount(99);
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(bean);
|
||||
ValidatorContext context = new DummyValidatorContext(bean, tpf);
|
||||
annotationActionValidatorManager.validate(bean, "beanMessageBundle", context);
|
||||
assertTrue(context.hasErrors());
|
||||
assertTrue(context.hasFieldErrors());
|
||||
@@ -252,7 +256,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
bean.setName("foo");
|
||||
bean.setCount(150);
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(bean);
|
||||
ValidatorContext context = new DummyValidatorContext(bean, tpf);
|
||||
annotationActionValidatorManager.validate(bean, "beanMessageBundle", context);
|
||||
assertTrue(context.hasErrors());
|
||||
assertTrue(context.hasFieldErrors());
|
||||
@@ -290,7 +294,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
user.setEmail("bad_email");
|
||||
user.setEmail2("bad_email");
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(user);
|
||||
ValidatorContext context = new DummyValidatorContext(user, tpf);
|
||||
annotationActionValidatorManager.validate(user, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -332,13 +336,13 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
user.setEmail("mark_bad_email_for_field_val@foo.com");
|
||||
user.setEmail2("mark_bad_email_for_field_val@foo.com");
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(user);
|
||||
ValidatorContext context = new DummyValidatorContext(user, tpf);
|
||||
annotationActionValidatorManager.validate(user, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
// check field errors
|
||||
// we have an error in this field level, email does not ends with mycompany.com
|
||||
List l = (List) context.getFieldErrors().get("email");
|
||||
List l = context.getFieldErrors().get("email");
|
||||
assertNotNull(l);
|
||||
assertEquals(1, l.size()); // because email-field-val is short-circuit
|
||||
assertEquals("Email not from the right company.", l.get(0));
|
||||
@@ -370,12 +374,12 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
user.setEmail("rainer_h(at)example.com");
|
||||
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(user);
|
||||
ValidatorContext context = new DummyValidatorContext(user, tpf);
|
||||
annotationActionValidatorManager.validate(user, null, context);
|
||||
|
||||
// check field level errors
|
||||
// shouldn't have any because action error prevents validation of anything else
|
||||
List l = (List) context.getFieldErrors().get("email2");
|
||||
List l = context.getFieldErrors().get("email2");
|
||||
assertNull(l);
|
||||
|
||||
|
||||
@@ -401,7 +405,7 @@ public class AnnotationActionValidatorManagerTest extends XWorkTestCase {
|
||||
user.setEmail("mark@mycompany.com");
|
||||
user.setEmail2("mark@mycompany.com");
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(user);
|
||||
ValidatorContext context = new DummyValidatorContext(user, tpf);
|
||||
annotationActionValidatorManager.validate(user, null, context);
|
||||
assertFalse(context.hasErrors());
|
||||
} catch (ValidationException ex) {
|
||||
|
||||
+2
-3
@@ -16,6 +16,7 @@
|
||||
package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.interceptor.ValidationAware;
|
||||
import com.opensymphony.xwork2.ValidationAwareSupport;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
@@ -37,11 +38,9 @@ public class ConversionErrorFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private static final String defaultFooMessage = "Invalid field value for field \"foo\".";
|
||||
|
||||
|
||||
private ConversionErrorFieldValidator validator;
|
||||
private ValidationAware validationAware;
|
||||
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
@@ -54,7 +53,7 @@ public class ConversionErrorFieldValidatorTest extends XWorkTestCase {
|
||||
validator = new ConversionErrorFieldValidator();
|
||||
validationAware = new ValidationAwareSupport();
|
||||
|
||||
DelegatingValidatorContext validatorContext = new DelegatingValidatorContext(validationAware);
|
||||
DelegatingValidatorContext validatorContext = new DelegatingValidatorContext(validationAware, container.inject(TextProviderFactory.class));
|
||||
stack.push(validatorContext);
|
||||
validator.setValidatorContext(validatorContext);
|
||||
validator.setFieldName("foo");
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
private DoubleRangeFieldValidator val;
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testRangeValidationWithError() throws Exception {
|
||||
//Explicitly set an out-of-range double for DoubleRangeValidatorTest
|
||||
@@ -107,7 +108,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
val.setMaxInclusive(10d);
|
||||
val.setFieldName("name");
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
val.setValidatorContext(context);
|
||||
|
||||
val.validate(prod);
|
||||
@@ -127,7 +128,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
|
||||
val.setFieldName("price");
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
val.setValidatorContext(context);
|
||||
|
||||
val.setMaxInclusive(9.95d);
|
||||
@@ -152,7 +153,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
|
||||
val.setFieldName("price");
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
val.setValidatorContext(context);
|
||||
|
||||
val.setMinInclusive(9.95d);
|
||||
@@ -170,7 +171,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
|
||||
val.setFieldName("price");
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
val.setValidatorContext(context);
|
||||
|
||||
val.setMinInclusive(9.95d);
|
||||
@@ -220,7 +221,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
val.setFieldName("price");
|
||||
val.setDefaultMessage("Price is wrong!");
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(action);
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(action, tpf);
|
||||
val.setValidatorContext(context);
|
||||
|
||||
val.validate(action);
|
||||
@@ -236,6 +237,7 @@ public class DoubleRangeValidatorTest extends XWorkTestCase {
|
||||
val = new DoubleRangeFieldValidator();
|
||||
val.setValueStack(ActionContext.getContext().getValueStack());
|
||||
ActionContext.getContext().setParameters(HttpParameters.create().build());
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+5
-7
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
|
||||
@@ -24,19 +26,15 @@ import java.util.*;
|
||||
* @author Mark Woon
|
||||
* @author Matthew Payne
|
||||
*/
|
||||
public class GenericValidatorContext extends DelegatingValidatorContext {
|
||||
public class DummyValidatorContext extends DelegatingValidatorContext {
|
||||
|
||||
private Collection<String> actionErrors;
|
||||
private Collection<String> actionMessages;
|
||||
private Map<String, List<String>> fieldErrors;
|
||||
|
||||
|
||||
/**
|
||||
* @deprecated Is used only in tests and will be removed
|
||||
*/
|
||||
@Deprecated
|
||||
public GenericValidatorContext(Object object) {
|
||||
super(object);
|
||||
public DummyValidatorContext(Object object, TextProviderFactory tpf) {
|
||||
super(object, tpf);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.validators.EmailValidator;
|
||||
@@ -29,6 +30,8 @@ import com.opensymphony.xwork2.validator.validators.EmailValidator;
|
||||
*/
|
||||
public class EmailValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testEmailValidity() throws Exception {
|
||||
assertTrue(verifyEmailValidity("TmJee@Yahoo.com"));
|
||||
assertTrue(verifyEmailValidity("tmjee@yahoo.com"));
|
||||
@@ -70,7 +73,7 @@ public class EmailValidatorTest extends XWorkTestCase {
|
||||
};
|
||||
|
||||
EmailValidator validator = new EmailValidator();
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action));
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action, tpf));
|
||||
validator.setFieldName("myEmail");
|
||||
validator.setDefaultMessage("invalid email");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
@@ -95,7 +98,7 @@ public class EmailValidatorTest extends XWorkTestCase {
|
||||
valueStack.push(action);
|
||||
validator.setValueStack(valueStack);
|
||||
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action));
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action, tpf));
|
||||
validator.setFieldName("myEmail");
|
||||
validator.setDefaultMessage("invalid email");
|
||||
validator.setRegexExpression("${emailExpression}");
|
||||
@@ -155,4 +158,10 @@ public class EmailValidatorTest extends XWorkTestCase {
|
||||
return validator;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,12 +38,14 @@ import java.util.Map;
|
||||
*/
|
||||
public class ExpressionValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testExpressionValidationOfStringLength() throws ValidationException {
|
||||
TestBean bean = new TestBean();
|
||||
bean.setName("abc");
|
||||
ActionContext.getContext().getValueStack().push(bean);
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -55,7 +57,7 @@ public class ExpressionValidatorTest extends XWorkTestCase {
|
||||
assertEquals("Name must be greater than 5 characters, it is currently 'abc'", nameErrors.get(0));
|
||||
|
||||
bean.setName("abcdefg");
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(bean, "expressionValidation", context);
|
||||
assertFalse(context.hasFieldErrors());
|
||||
}
|
||||
@@ -108,7 +110,7 @@ public class ExpressionValidatorTest extends XWorkTestCase {
|
||||
mock.expect("addActionError", C.ANY_ARGS);
|
||||
|
||||
ExpressionValidator ev = new ExpressionValidator();
|
||||
ev.setValidatorContext(new DelegatingValidatorContext(mock.proxy()));
|
||||
ev.setValidatorContext(new DelegatingValidatorContext(mock.proxy(), tpf));
|
||||
ev.setExpression("{top}");
|
||||
ev.setValueStack(ActionContext.getContext().getValueStack());
|
||||
ev.validate("Hello"); // {top} will evaluate to Hello that is not a Boolean
|
||||
@@ -136,6 +138,8 @@ public class ExpressionValidatorTest extends XWorkTestCase {
|
||||
EasyMock.replay(proxy);
|
||||
|
||||
ActionContext.getContext().setActionInvocation(invocation);
|
||||
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.validators.RegexFieldValidator;
|
||||
@@ -36,6 +37,13 @@ import java.util.List;
|
||||
*/
|
||||
public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
public void testMatch() throws Exception {
|
||||
MyTestPerson testPerson = new MyTestPerson();
|
||||
testPerson.setUsername("Secret");
|
||||
@@ -45,7 +53,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setRegex("^Sec.*");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("username");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
@@ -66,7 +74,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setTrim(false);
|
||||
validator.setRegex("^Sec.*\\s");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("username");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
@@ -86,7 +94,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setRegex("^Sec.*");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("username");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
@@ -111,7 +119,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setRegex("^Sec.*");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName(null);
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
@@ -144,7 +152,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setRegex("^Sec.*");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("username");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
@@ -164,7 +172,7 @@ public class RegexFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
RegexFieldValidator validator = new RegexFieldValidator();
|
||||
validator.setRegex("[0-9][0-9]");
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("age");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(testPerson);
|
||||
|
||||
+7
-4
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.mock.MockActionInvocation;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
@@ -90,17 +91,19 @@ public class RepopulateConversionErrorFieldValidatorSupportTest extends XWorkTes
|
||||
Map<String, Object> conversionErrors = ActionContext.getContext().getConversionErrors();
|
||||
conversionErrors.put("someFieldName", conversionErrorValue);
|
||||
conversionErrors.put("xxxsomeFieldName", conversionErrorValue);
|
||||
|
||||
action = new ActionSupport();
|
||||
|
||||
TextProviderFactory tpf = container.inject(TextProviderFactory.class);
|
||||
|
||||
action = container.inject(ActionSupport.class);
|
||||
validator1 =
|
||||
new InternalRepopulateConversionErrorFieldValidatorSupport();
|
||||
validator1.setFieldName("someFieldName");
|
||||
validator1.setValidatorContext(new DelegatingValidatorContext(action));
|
||||
validator1.setValidatorContext(new DelegatingValidatorContext(action, tpf));
|
||||
|
||||
validator2 =
|
||||
new InternalRepopulateConversionErrorFieldValidatorSupport();
|
||||
validator2.setFieldName("someFieldName");
|
||||
validator2.setValidatorContext(new DelegatingValidatorContext(action) {
|
||||
validator2.setValidatorContext(new DelegatingValidatorContext(action, tpf) {
|
||||
@Override
|
||||
public String getFullFieldName(String fieldName) {
|
||||
return "xxx"+fieldName;
|
||||
|
||||
+1
-1
@@ -153,7 +153,7 @@ public class SimpleActionValidationTest extends XWorkTestCase {
|
||||
SimpleAction action = new SimpleAction();
|
||||
container.inject(action);
|
||||
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action);
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action, container.inject(TextProviderFactory.class));
|
||||
validator.setValidatorContext(validatorContext);
|
||||
validator.validate(this);
|
||||
assertTrue(validatorContext.hasActionErrors());
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator;
|
||||
@@ -162,7 +163,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
|
||||
validator = new StringLengthFieldValidator();
|
||||
validator.setFieldName("myField");
|
||||
validator.setMessageKey("error");
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action));
|
||||
validator.setValidatorContext(new DelegatingValidatorContext(action, container.inject(TextProviderFactory.class)));
|
||||
validator.setMaxLength(5);
|
||||
validator.setMinLength(2);
|
||||
validator.setValueStack(valueStack);
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.opensymphony.xwork2.Action;
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.ActionInvocation;
|
||||
import com.opensymphony.xwork2.ActionProxy;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.ValidationAwareSupport;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.config.entities.ActionConfig;
|
||||
@@ -36,11 +37,13 @@ import java.util.Map;
|
||||
*/
|
||||
public class StringValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testRequiredStringWithNullValue() throws Exception {
|
||||
Equidae equidae = new Equidae();
|
||||
equidae.setHorse(null);
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
|
||||
assertTrue(context.hasFieldErrors());
|
||||
@@ -54,7 +57,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setHorse("");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
|
||||
assertTrue(context.hasFieldErrors());
|
||||
@@ -66,7 +69,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
// trim = false should fail
|
||||
equidae.setHorse(" ");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
|
||||
assertTrue(context.hasFieldErrors());
|
||||
@@ -85,7 +88,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setDonkey("asdf");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
DelegatingValidatorContext context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -109,7 +112,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setCow("asdf ");
|
||||
equidae.setDonkey("asdf ");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -128,7 +131,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setCow("asdfasdf");
|
||||
equidae.setDonkey("asdfasdf");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -143,7 +146,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setCow("asdfasdf ");
|
||||
equidae.setDonkey("asdfasdf ");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -162,7 +165,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
equidae.setCow("asdfasdfasdf");
|
||||
equidae.setDonkey("asdfasdfasdf");
|
||||
ActionContext.getContext().getValueStack().push(equidae);
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport());
|
||||
context = new DelegatingValidatorContext(new ValidationAwareSupport(), tpf);
|
||||
container.getInstance(ActionValidatorManager.class).validate(equidae, null, context);
|
||||
assertTrue(context.hasFieldErrors());
|
||||
|
||||
@@ -213,5 +216,7 @@ public class StringValidatorTest extends XWorkTestCase {
|
||||
EasyMock.replay(proxy);
|
||||
|
||||
ActionContext.getContext().setActionInvocation(invocation);
|
||||
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.opensymphony.xwork2.validator;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.validators.URLValidator;
|
||||
@@ -36,11 +37,12 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
|
||||
ValueStack stack;
|
||||
ActionContext actionContext;
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testAcceptNullValueForMutualExclusionOfValidators() throws Exception {
|
||||
|
||||
URLValidator validator = new URLValidator();
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("testingUrl1");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(new MyObject());
|
||||
@@ -54,7 +56,7 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
public void testInvalidEmptyValue() throws Exception {
|
||||
|
||||
URLValidator validator = new URLValidator();
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("testingUrl2");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(new MyObject());
|
||||
@@ -68,7 +70,7 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
public void testInvalidValue() throws Exception {
|
||||
|
||||
URLValidator validator = new URLValidator();
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("testingUrl3");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(new MyObject());
|
||||
@@ -83,7 +85,7 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
public void testValidUrl1() throws Exception {
|
||||
|
||||
URLValidator validator = new URLValidator();
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("testingUrl4");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(new MyObject());
|
||||
@@ -97,7 +99,7 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
public void testValidUrl2() throws Exception {
|
||||
|
||||
URLValidator validator = new URLValidator();
|
||||
validator.setValidatorContext(new GenericValidatorContext(new Object()));
|
||||
validator.setValidatorContext(new DummyValidatorContext(new Object(), tpf));
|
||||
validator.setFieldName("testingUrl5");
|
||||
validator.setValueStack(ActionContext.getContext().getValueStack());
|
||||
validator.validate(new MyObject());
|
||||
@@ -203,6 +205,7 @@ public class URLValidatorTest extends XWorkTestCase {
|
||||
super.setUp();
|
||||
stack = ActionContext.getContext().getValueStack();
|
||||
actionContext = ActionContext.getContext();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -35,11 +35,10 @@ public class VisitorFieldValidatorTest extends XWorkTestCase {
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
action = new VisitorValidatorTestAction();
|
||||
container.inject(action);
|
||||
action = container.inject(VisitorValidatorTestAction.class);
|
||||
|
||||
TestBean bean = action.getBean();
|
||||
Calendar cal = new GregorianCalendar(1900, 01, 01);
|
||||
Calendar cal = new GregorianCalendar(1900, 1, 1);
|
||||
bean.setBirth(cal.getTime());
|
||||
bean.setCount(-1);
|
||||
|
||||
@@ -98,7 +97,7 @@ public class VisitorFieldValidatorTest extends XWorkTestCase {
|
||||
assertEquals(1, beanCountMessages.size());
|
||||
|
||||
String beanCountMessage = beanCountMessages.get(0);
|
||||
assertEquals("bean: Model: Count must be between 1 and 100, current value is -1.", beanCountMessage);
|
||||
assertEquals("bean: TestBean model: Count must be between 1 and 100, current value is -1.", beanCountMessage);
|
||||
}
|
||||
|
||||
public void testCollectionValidation() throws Exception {
|
||||
|
||||
+20
-5
@@ -1,8 +1,12 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.opensymphony.xwork2.CompositeTextProvider;
|
||||
import com.opensymphony.xwork2.TextProvider;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.validator.DelegatingValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
@@ -23,12 +27,12 @@ public class AppendingValidatorContextTest extends XWorkTestCase {
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
action = new VisitorValidatorTestAction();
|
||||
ValidatorContext vc1 = new DelegatingValidatorContext(action);
|
||||
action = container.inject(VisitorValidatorTestAction.class);
|
||||
TextProviderFactory tpf = container.getInstance(TextProviderFactory.class);
|
||||
ValidatorContext vc1 = new DelegatingValidatorContext(action, tpf);
|
||||
|
||||
VisitorFieldValidator.AppendingValidatorContext vc2 = new AppendingValidatorContext(
|
||||
vc1, "value", FIRST_NAME, "");
|
||||
validatorContext = new AppendingValidatorContext(vc2, "value", SECOND_NAME, "");
|
||||
VisitorFieldValidator.AppendingValidatorContext vc2 = new AppendingValidatorContext(vc1, createTextProvider(action, vc1), FIRST_NAME, "");
|
||||
validatorContext = new AppendingValidatorContext(vc2, createTextProvider(action, vc2), SECOND_NAME, "");
|
||||
}
|
||||
|
||||
public void testGetFullFieldName() throws Exception {
|
||||
@@ -44,4 +48,15 @@ public class AppendingValidatorContextTest extends XWorkTestCase {
|
||||
assertEquals(1, fieldErrors.size());
|
||||
assertTrue(fieldErrors.containsKey(FULL_FIELD_NAME));
|
||||
}
|
||||
|
||||
private CompositeTextProvider createTextProvider(Object o, ValidatorContext parent) {
|
||||
List<TextProvider> textProviders = new LinkedList<>();
|
||||
if (o instanceof TextProvider) {
|
||||
textProviders.add((TextProvider) o);
|
||||
}
|
||||
textProviders.add(parent);
|
||||
|
||||
return new CompositeTextProvider(textProviders);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+8
-4
@@ -1,10 +1,11 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.util.ValueStackFactory;
|
||||
import com.opensymphony.xwork2.validator.GenericValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.DummyValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
import java.util.Calendar;
|
||||
@@ -13,10 +14,12 @@ import java.util.Locale;
|
||||
|
||||
public class DateRangeFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void testPassValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(createDate(2013, 6, 6));
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
DateRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -29,7 +32,7 @@ public class DateRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMinValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(createDate(2012, Calendar.MARCH, 3));
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
DateRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -43,7 +46,7 @@ public class DateRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMaxValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(createDate(2014, Calendar.APRIL, 4));
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
DateRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -88,6 +91,7 @@ public class DateRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
ActionContext.getContext().setLocale(new Locale("DE"));
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+12
-4
@@ -1,17 +1,25 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.util.ValueStackFactory;
|
||||
import com.opensymphony.xwork2.validator.GenericValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.DummyValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
public class IntRangeFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
public void testPassValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(100);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
IntRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -24,7 +32,7 @@ public class IntRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMinValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(98);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
IntRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -38,7 +46,7 @@ public class IntRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMaxValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(102);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
IntRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
|
||||
+12
-4
@@ -1,17 +1,25 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.util.ValueStackFactory;
|
||||
import com.opensymphony.xwork2.validator.GenericValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.DummyValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
public class LongRangeFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
public void testPassValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(100);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
LongRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -24,7 +32,7 @@ public class LongRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMinValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(98);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
LongRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -38,7 +46,7 @@ public class LongRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMaxValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction(102);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
LongRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
|
||||
+11
-3
@@ -2,13 +2,21 @@ package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.ActionContext;
|
||||
import com.opensymphony.xwork2.ActionSupport;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.validator.GenericValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.DummyValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
public class RequiredStringValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
public void testRequiredStringPass() throws Exception {
|
||||
// given
|
||||
ValueStack valueStack = ActionContext.getContext().getValueStack();
|
||||
@@ -17,7 +25,7 @@ public class RequiredStringValidatorTest extends XWorkTestCase {
|
||||
action.setStringValue("a string");
|
||||
valueStack.push(action);
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
RequiredStringValidator validator = new RequiredStringValidator();
|
||||
validator.setValidatorContext(context);
|
||||
validator.setFieldName("stringValue");
|
||||
@@ -37,7 +45,7 @@ public class RequiredStringValidatorTest extends XWorkTestCase {
|
||||
ValidationAction action = new ValidationAction();
|
||||
valueStack.push(action);
|
||||
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
RequiredStringValidator validator = new RequiredStringValidator();
|
||||
validator.setValidatorContext(context);
|
||||
validator.setFieldName("stringValue");
|
||||
|
||||
+12
-4
@@ -1,17 +1,25 @@
|
||||
package com.opensymphony.xwork2.validator.validators;
|
||||
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.XWorkTestCase;
|
||||
import com.opensymphony.xwork2.util.ValueStack;
|
||||
import com.opensymphony.xwork2.util.ValueStackFactory;
|
||||
import com.opensymphony.xwork2.validator.GenericValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.DummyValidatorContext;
|
||||
import com.opensymphony.xwork2.validator.ValidatorContext;
|
||||
|
||||
public class ShortRangeFieldValidatorTest extends XWorkTestCase {
|
||||
|
||||
private TextProviderFactory tpf;
|
||||
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
tpf = container.inject(TextProviderFactory.class);
|
||||
}
|
||||
|
||||
public void testPassValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction((short) 5);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
ShortRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -24,7 +32,7 @@ public class ShortRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMinValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction((short) 1);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
ShortRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
@@ -38,7 +46,7 @@ public class ShortRangeFieldValidatorTest extends XWorkTestCase {
|
||||
public void testMaxValidation() throws Exception {
|
||||
// given
|
||||
ValidationAction action = prepareAction((short) 11);
|
||||
ValidatorContext context = new GenericValidatorContext(action);
|
||||
ValidatorContext context = new DummyValidatorContext(action, tpf);
|
||||
ShortRangeFieldValidator validator = prepareValidator(action, context);
|
||||
|
||||
// when
|
||||
|
||||
@@ -178,7 +178,7 @@ public class TextTagTest extends AbstractTagTest {
|
||||
ValueStack newStack = container.getInstance(ValueStackFactory.class).createValueStack();
|
||||
newStack.getContext().put(ActionContext.LOCALE, foreignLocale);
|
||||
newStack.getContext().put(ActionContext.CONTAINER, container);
|
||||
newStack.push(new TestAction1());
|
||||
newStack.push(container.inject(TestAction1.class));
|
||||
request.setAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY, newStack);
|
||||
assertNotSame(ActionContext.getContext().getValueStack().peek(), newStack.peek());
|
||||
|
||||
@@ -189,7 +189,7 @@ public class TextTagTest extends AbstractTagTest {
|
||||
|
||||
public void testTextTagUsesLocaleFromValueStack() throws JspException {
|
||||
stack.pop();
|
||||
stack.push(new TestAction1());
|
||||
stack.push(container.inject(TestAction1.class));
|
||||
|
||||
Locale defaultLocale = getDefaultLocale();
|
||||
Locale foreignLocale = getForeignLocale();
|
||||
|
||||
@@ -370,15 +370,14 @@ public class TooltipTest extends AbstractUITagTest {
|
||||
verify(TooltipTest.class.getResource("tooltip-3.txt"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*
|
||||
*/
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
initDispatcher(new HashMap<String,String>(){{
|
||||
|
||||
initDispatcher(new HashMap<String,String>(){{
|
||||
put("configProviders", TestConfigurationProvider.class.getName());
|
||||
}});
|
||||
createMocks();
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
invalid.count=Model: Count must be between ${min} and ${max}, current value is ${count}.
|
||||
invalid.count=TestBean model: Count must be between ${min} and ${max}, current value is ${count}.
|
||||
|
||||
+9
-1
@@ -23,6 +23,7 @@ package org.apache.struts.beanvalidation.validation.interceptor;
|
||||
import com.opensymphony.xwork2.ActionInvocation;
|
||||
import com.opensymphony.xwork2.ActionProxy;
|
||||
import com.opensymphony.xwork2.ModelDriven;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
|
||||
import com.opensymphony.xwork2.util.AnnotationUtils;
|
||||
@@ -55,7 +56,9 @@ import java.util.Set;
|
||||
public class BeanValidationInterceptor extends MethodFilterInterceptor {
|
||||
|
||||
private static final Logger LOG = LogManager.getLogger(BeanValidationInterceptor.class);
|
||||
|
||||
protected BeanValidationManager beanValidationManager;
|
||||
protected TextProviderFactory textProviderFactory;
|
||||
protected boolean convertToUtf8 = false;
|
||||
protected String convertFromEncoding = "ISO-8859-1";
|
||||
|
||||
@@ -64,6 +67,11 @@ public class BeanValidationInterceptor extends MethodFilterInterceptor {
|
||||
this.beanValidationManager = beanValidationManager;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTextProviderFactory(TextProviderFactory textProviderFactory) {
|
||||
this.textProviderFactory = textProviderFactory;
|
||||
}
|
||||
|
||||
@Inject(value = ValidatorConstants.CONVERT_MESSAGE_TO_UTF8, required = false)
|
||||
public void setConvertToUtf8(String convertToUtf8) {
|
||||
this.convertToUtf8 = BooleanUtils.toBoolean(convertToUtf8);
|
||||
@@ -122,7 +130,7 @@ public class BeanValidationInterceptor extends MethodFilterInterceptor {
|
||||
@SuppressWarnings("nls")
|
||||
private void addBeanValidationErrors(Set<ConstraintViolation<Object>> constraintViolations, Object action) {
|
||||
if (constraintViolations != null) {
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action);
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action, textProviderFactory);
|
||||
for (ConstraintViolation<Object> constraintViolation : constraintViolations) {
|
||||
String key = constraintViolation.getMessage();
|
||||
String message = key;
|
||||
|
||||
+9
-2
@@ -23,6 +23,7 @@ package org.apache.struts2.oval.interceptor;
|
||||
import com.opensymphony.xwork2.ActionInvocation;
|
||||
import com.opensymphony.xwork2.ActionProxy;
|
||||
import com.opensymphony.xwork2.ModelDriven;
|
||||
import com.opensymphony.xwork2.TextProviderFactory;
|
||||
import com.opensymphony.xwork2.Validateable;
|
||||
import com.opensymphony.xwork2.inject.Inject;
|
||||
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
|
||||
@@ -57,13 +58,19 @@ public class OValValidationInterceptor extends MethodFilterInterceptor {
|
||||
protected boolean alwaysInvokeValidate = true;
|
||||
protected boolean programmatic = true;
|
||||
protected OValValidationManager validationManager;
|
||||
private boolean validateJPAAnnotations;
|
||||
protected boolean validateJPAAnnotations;
|
||||
protected TextProviderFactory textProviderFactory;
|
||||
|
||||
@Inject
|
||||
public void setValidationManager(OValValidationManager validationManager) {
|
||||
this.validationManager = validationManager;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTextProviderFactory(TextProviderFactory textProviderFactory) {
|
||||
this.textProviderFactory = textProviderFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable OVal support for JPA
|
||||
*/
|
||||
@@ -170,7 +177,7 @@ public class OValValidationInterceptor extends MethodFilterInterceptor {
|
||||
|
||||
private void addValidationErrors(ConstraintViolation[] violations, Object action, ValueStack valueStack, String parentFieldname) {
|
||||
if (violations != null) {
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action);
|
||||
ValidatorContext validatorContext = new DelegatingValidatorContext(action, textProviderFactory);
|
||||
for (ConstraintViolation violation : violations) {
|
||||
//translate message
|
||||
String key = violation.getMessage();
|
||||
|
||||
@@ -52,11 +52,8 @@ public class I18NAttributeEvaluator extends AbstractAttributeEvaluator {
|
||||
throw new ConfigurationException("There is no ActionContext for current request!");
|
||||
}
|
||||
|
||||
TextProviderFactory tpf = new TextProviderFactory();
|
||||
ctx.getContainer().inject(tpf);
|
||||
LocaleProvider localeProvider = ctx.getContainer().getInstance(LocaleProvider.class);
|
||||
|
||||
TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass(), localeProvider);
|
||||
TextProviderFactory tpf = ctx.getContainer().inject(TextProviderFactory.class);
|
||||
TextProvider textProvider = tpf.createInstance(ctx.getActionInvocation().getAction().getClass());
|
||||
|
||||
if (textProvider != null) {
|
||||
LOG.debug("Trying find text [{}] using TextProvider {}", expression, textProvider);
|
||||
|
||||
Reference in New Issue
Block a user