IN PROGRESS - issue SWF-720: Multiple checkboxes to Collection mapping
http://jira.springframework.org/browse/SWF-720
This commit is contained in:
@@ -20,7 +20,6 @@ import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.binding.convert.service.DefaultConversionService;
|
||||
import org.springframework.binding.format.registry.DefaultFormatterRegistry;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
|
||||
import org.springframework.webflow.expression.DefaultExpressionParserFactory;
|
||||
@@ -39,21 +38,11 @@ class FlowBuilderServicesBeanDefinitionParser extends AbstractSingleBeanDefiniti
|
||||
}
|
||||
|
||||
protected void doParse(Element element, ParserContext context, BeanDefinitionBuilder builder) {
|
||||
parseFormatterRegistry(element, builder, context);
|
||||
parseConversionService(element, builder, context);
|
||||
parseExpressionParser(element, builder, context);
|
||||
parseViewFactoryCreator(element, builder, context);
|
||||
}
|
||||
|
||||
private void parseFormatterRegistry(Element element, BeanDefinitionBuilder definitionBuilder, ParserContext context) {
|
||||
String formatterRegistry = element.getAttribute("formatter-registry");
|
||||
if (StringUtils.hasText(formatterRegistry)) {
|
||||
definitionBuilder.addPropertyReference("formatterRegistry", formatterRegistry);
|
||||
} else {
|
||||
definitionBuilder.addPropertyValue("formatterRegistry", DefaultFormatterRegistry.getSharedInstance());
|
||||
}
|
||||
}
|
||||
|
||||
private void parseConversionService(Element element, BeanDefinitionBuilder definitionBuilder, ParserContext context) {
|
||||
String conversionService = element.getAttribute("conversion-service");
|
||||
if (StringUtils.hasText(conversionService)) {
|
||||
|
||||
@@ -28,7 +28,6 @@ import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.BeanDefinitionParser;
|
||||
import org.springframework.beans.factory.xml.ParserContext;
|
||||
import org.springframework.binding.convert.service.DefaultConversionService;
|
||||
import org.springframework.binding.format.registry.DefaultFormatterRegistry;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.util.xml.DomUtils;
|
||||
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
|
||||
@@ -127,7 +126,6 @@ class FlowRegistryBeanDefinitionParser extends AbstractSingleBeanDefinitionParse
|
||||
|
||||
private BeanDefinition createDefaultFlowBuilderServices(ParserContext context) {
|
||||
BeanDefinitionBuilder defaultBuilder = BeanDefinitionBuilder.genericBeanDefinition(FlowBuilderServices.class);
|
||||
defaultBuilder.addPropertyValue("formatterRegistry", DefaultFormatterRegistry.getSharedInstance());
|
||||
defaultBuilder.addPropertyValue("conversionService", DefaultConversionService.getSharedInstance());
|
||||
defaultBuilder.addPropertyValue("expressionParser", DefaultExpressionParserFactory.getExpressionParser());
|
||||
defaultBuilder.addPropertyValue("viewFactoryCreator", BeanDefinitionBuilder.genericBeanDefinition(
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
xmlns:beans="http://www.springframework.org/schema/beans"
|
||||
targetNamespace="http://www.springframework.org/schema/webflow-config"
|
||||
elementFormDefault="qualified" attributeFormDefault="unqualified"
|
||||
version="2.0">
|
||||
version="2.0.3">
|
||||
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
@@ -188,15 +188,6 @@ This tag is only needed when you wish to plugin custom implementations.
|
||||
<xsd:documentation>
|
||||
<![CDATA[
|
||||
The custom ConversionService implementation to use to convert from one type to another.
|
||||
]]>
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
</xsd:attribute>
|
||||
<xsd:attribute name="formatter-registry">
|
||||
<xsd:annotation>
|
||||
<xsd:documentation>
|
||||
<![CDATA[
|
||||
The custom FormatterRegistry implementation to use to format model properties for display in a View.
|
||||
]]>
|
||||
</xsd:documentation>
|
||||
</xsd:annotation>
|
||||
|
||||
@@ -17,7 +17,6 @@ package org.springframework.webflow.engine.builder;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.webflow.core.collection.AttributeMap;
|
||||
import org.springframework.webflow.definition.registry.FlowDefinitionLocator;
|
||||
@@ -71,12 +70,6 @@ public interface FlowBuilderContext {
|
||||
*/
|
||||
public ExpressionParser getExpressionParser();
|
||||
|
||||
/**
|
||||
* Returns an application-wide registry of formatters for formatting view values.
|
||||
* @return the formatter registry
|
||||
*/
|
||||
public FormatterRegistry getFormatterRegistry();
|
||||
|
||||
/**
|
||||
* Returns the application context hosting the flow system.
|
||||
* @return the application context
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
*/
|
||||
package org.springframework.webflow.engine.builder;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.webflow.execution.View;
|
||||
import org.springframework.webflow.execution.ViewFactory;
|
||||
|
||||
@@ -32,11 +32,11 @@ public interface ViewFactoryCreator {
|
||||
* provided identifier.
|
||||
* @param viewId an expression that resolves the id of the view to render
|
||||
* @param expressionParser an optional expression parser to use to resolve view expressions
|
||||
* @param formatterRegistry an optional formatter registry to use to format text values
|
||||
* @param conversionService an optional conversion service to use to format text values
|
||||
* @return the view factory
|
||||
*/
|
||||
public ViewFactory createViewFactory(Expression viewId, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry);
|
||||
ConversionService conversionService);
|
||||
|
||||
/**
|
||||
* Get the default id of the view to render in the provided view state by convention.
|
||||
|
||||
@@ -608,7 +608,7 @@ public class FlowModelFlowBuilder extends AbstractFlowBuilder {
|
||||
|
||||
private ViewFactory createViewFactory(Expression viewId) {
|
||||
return getLocalContext().getViewFactoryCreator().createViewFactory(viewId,
|
||||
getLocalContext().getExpressionParser(), getLocalContext().getFormatterRegistry());
|
||||
getLocalContext().getExpressionParser(), getLocalContext().getConversionService());
|
||||
}
|
||||
|
||||
private ViewVariable[] parseViewVariables(List vars) {
|
||||
|
||||
@@ -17,7 +17,6 @@ package org.springframework.webflow.engine.builder.model;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.GenericApplicationContext;
|
||||
import org.springframework.webflow.core.collection.AttributeMap;
|
||||
@@ -86,14 +85,6 @@ class LocalFlowBuilderContext implements FlowBuilderContext {
|
||||
}
|
||||
}
|
||||
|
||||
public FormatterRegistry getFormatterRegistry() {
|
||||
if (localFlowContext.containsLocalBean("formatterRegistry")) {
|
||||
return (FormatterRegistry) localFlowContext.getBean("formatterRegistry", FormatterRegistry.class);
|
||||
} else {
|
||||
return parent.getFormatterRegistry();
|
||||
}
|
||||
}
|
||||
|
||||
public ExpressionParser getExpressionParser() {
|
||||
if (localFlowContext.containsLocalBean("expressionParser")) {
|
||||
return (ExpressionParser) localFlowContext.getBean("expressionParser", ExpressionParser.class);
|
||||
|
||||
@@ -20,7 +20,6 @@ import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.convert.service.GenericConversionService;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.webflow.core.collection.AttributeMap;
|
||||
@@ -94,10 +93,6 @@ public class FlowBuilderContextImpl implements FlowBuilderContext {
|
||||
return flowBuilderServices.getViewFactoryCreator();
|
||||
}
|
||||
|
||||
public FormatterRegistry getFormatterRegistry() {
|
||||
return flowBuilderServices.getFormatterRegistry();
|
||||
}
|
||||
|
||||
public ExpressionParser getExpressionParser() {
|
||||
return flowBuilderServices.getExpressionParser();
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -60,11 +59,6 @@ public class FlowBuilderServices implements ApplicationContextAware, Initializin
|
||||
*/
|
||||
private ConversionService conversionService;
|
||||
|
||||
/**
|
||||
* The service for formatting string values for display in a UI.
|
||||
*/
|
||||
private FormatterRegistry formatterRegistry;
|
||||
|
||||
/**
|
||||
* The parser for parsing expression strings into expression objects. The default is Web Flow's default expression
|
||||
* parser implementation.
|
||||
@@ -100,14 +94,6 @@ public class FlowBuilderServices implements ApplicationContextAware, Initializin
|
||||
this.conversionService = conversionService;
|
||||
}
|
||||
|
||||
public FormatterRegistry getFormatterRegistry() {
|
||||
return formatterRegistry;
|
||||
}
|
||||
|
||||
public void setFormatterRegistry(FormatterRegistry formatterRegistry) {
|
||||
this.formatterRegistry = formatterRegistry;
|
||||
}
|
||||
|
||||
public ExpressionParser getExpressionParser() {
|
||||
return expressionParser;
|
||||
}
|
||||
@@ -132,7 +118,6 @@ public class FlowBuilderServices implements ApplicationContextAware, Initializin
|
||||
Assert.notNull(flowArtifactFactory, "The FlowArtifactFactory is required");
|
||||
Assert.notNull(viewFactoryCreator, "The ViewFactoryCreator is required");
|
||||
Assert.notNull(conversionService, "The type ConversionService is required");
|
||||
Assert.notNull(formatterRegistry, "The FormatterRegistry is required");
|
||||
Assert.notNull(expressionParser, "The expressionParser is required");
|
||||
Assert.notNull(applicationContext, "The ApplicationContext is required");
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package org.springframework.webflow.engine.builder.support;
|
||||
|
||||
import org.springframework.binding.convert.Converter;
|
||||
import org.springframework.binding.convert.converters.Converter;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.expression.support.FluentParserContext;
|
||||
@@ -55,15 +55,15 @@ class TextToTargetStateResolver implements Converter {
|
||||
this.flowBuilderContext = flowBuilderContext;
|
||||
}
|
||||
|
||||
public Class[] getSourceClasses() {
|
||||
return new Class[] { String.class };
|
||||
public Class getSourceClass() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
public Class[] getTargetClasses() {
|
||||
return new Class[] { TargetStateResolver.class };
|
||||
public Class getTargetClass() {
|
||||
return TargetStateResolver.class;
|
||||
}
|
||||
|
||||
public Object convert(Object source, Class targetClass, Object context) throws Exception {
|
||||
public Object convertSourceToTargetClass(Object source, Class targetClass) throws Exception {
|
||||
String targetStateId = (String) source;
|
||||
if (!StringUtils.hasText(targetStateId)) {
|
||||
return null;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package org.springframework.webflow.engine.builder.support;
|
||||
|
||||
import org.springframework.binding.convert.ConversionExecutionException;
|
||||
import org.springframework.binding.convert.Converter;
|
||||
import org.springframework.binding.convert.converters.Converter;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.expression.support.FluentParserContext;
|
||||
@@ -59,15 +59,15 @@ class TextToTransitionCriteria implements Converter {
|
||||
this.flowBuilderContext = flowBuilderContext;
|
||||
}
|
||||
|
||||
public Class[] getSourceClasses() {
|
||||
return new Class[] { String.class };
|
||||
public Class getSourceClass() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
public Class[] getTargetClasses() {
|
||||
return new Class[] { TransitionCriteria.class };
|
||||
public Class getTargetClass() {
|
||||
return TransitionCriteria.class;
|
||||
}
|
||||
|
||||
public Object convert(Object source, Class targetClass, Object context) throws Exception {
|
||||
public Object convertSourceToTargetClass(Object source, Class targetClass) throws Exception {
|
||||
String encodedCriteria = (String) source;
|
||||
ExpressionParser parser = flowBuilderContext.getExpressionParser();
|
||||
if (!StringUtils.hasText(encodedCriteria)
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.springframework.webflow.mvc.builder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.web.servlet.View;
|
||||
@@ -115,11 +115,11 @@ public class MvcViewFactoryCreator implements ViewFactoryCreator, ApplicationCon
|
||||
}
|
||||
|
||||
public ViewFactory createViewFactory(Expression viewId, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
ConversionService conversionService) {
|
||||
if (environment == MvcEnvironment.SERVLET) {
|
||||
return new ServletMvcViewFactory(viewId, flowViewResolver, expressionParser, formatterRegistry);
|
||||
return new ServletMvcViewFactory(viewId, flowViewResolver, expressionParser, conversionService);
|
||||
} else if (environment == MvcEnvironment.PORTLET) {
|
||||
return new PortletMvcViewFactory(viewId, flowViewResolver, expressionParser, formatterRegistry);
|
||||
return new PortletMvcViewFactory(viewId, flowViewResolver, expressionParser, conversionService);
|
||||
} else {
|
||||
throw new IllegalStateException("Web MVC Environment " + environment + " not supported ");
|
||||
}
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
*/
|
||||
package org.springframework.webflow.mvc.portlet;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
import org.springframework.webflow.mvc.view.AbstractMvcView;
|
||||
@@ -31,22 +31,15 @@ import org.springframework.webflow.mvc.view.FlowViewResolver;
|
||||
*/
|
||||
public class PortletMvcViewFactory extends AbstractMvcViewFactory {
|
||||
|
||||
/**
|
||||
* Creates a new portlet mvc view factory.
|
||||
* @param viewId the view id expression
|
||||
* @param viewResolver the flow view resolver
|
||||
* @param expressionParser the expression parser
|
||||
* @param formatterRegistry the view formatter registry
|
||||
*/
|
||||
public PortletMvcViewFactory(Expression viewId, FlowViewResolver viewResolver, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
super(viewId, viewResolver, expressionParser, formatterRegistry);
|
||||
ConversionService conversionService) {
|
||||
super(viewId, viewResolver, expressionParser, conversionService);
|
||||
}
|
||||
|
||||
protected AbstractMvcView createMvcView(View view, RequestContext context) {
|
||||
PortletMvcView mvcView = new PortletMvcView(view, context);
|
||||
mvcView.setExpressionParser(getExpressionParser());
|
||||
mvcView.setFormatterRegistry(getFormatterRegistry());
|
||||
mvcView.setConversionService(getConversionService());
|
||||
return mvcView;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
*/
|
||||
package org.springframework.webflow.mvc.servlet;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.web.servlet.View;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
import org.springframework.webflow.mvc.view.AbstractMvcView;
|
||||
@@ -32,14 +32,14 @@ import org.springframework.webflow.mvc.view.FlowViewResolver;
|
||||
public class ServletMvcViewFactory extends AbstractMvcViewFactory {
|
||||
|
||||
public ServletMvcViewFactory(Expression viewId, FlowViewResolver viewResolver, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
super(viewId, viewResolver, expressionParser, formatterRegistry);
|
||||
ConversionService conversionService) {
|
||||
super(viewId, viewResolver, expressionParser, conversionService);
|
||||
}
|
||||
|
||||
protected AbstractMvcView createMvcView(View view, RequestContext context) {
|
||||
ServletMvcView mvcView = new ServletMvcView(view, context);
|
||||
mvcView.setExpressionParser(getExpressionParser());
|
||||
mvcView.setFormatterRegistry(getFormatterRegistry());
|
||||
mvcView.setConversionService(getConversionService());
|
||||
return mvcView;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,23 +27,19 @@ import java.util.Set;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.binding.convert.ConversionExecutionException;
|
||||
import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.convert.service.DefaultConversionService;
|
||||
import org.springframework.binding.expression.EvaluationException;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.expression.ParserContext;
|
||||
import org.springframework.binding.expression.support.FluentParserContext;
|
||||
import org.springframework.binding.expression.support.StaticExpression;
|
||||
import org.springframework.binding.format.Formatter;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.binding.format.InvalidFormatException;
|
||||
import org.springframework.binding.mapping.MappingResult;
|
||||
import org.springframework.binding.mapping.MappingResults;
|
||||
import org.springframework.binding.mapping.MappingResultsCriteria;
|
||||
import org.springframework.binding.mapping.impl.DefaultMapper;
|
||||
import org.springframework.binding.mapping.impl.DefaultMapping;
|
||||
import org.springframework.binding.mapping.impl.DefaultMappingContext;
|
||||
import org.springframework.binding.message.MessageBuilder;
|
||||
import org.springframework.binding.message.MessageContext;
|
||||
import org.springframework.binding.message.MessageContextErrors;
|
||||
@@ -52,7 +48,6 @@ import org.springframework.util.ReflectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.validation.Errors;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.springframework.web.util.WebUtils;
|
||||
import org.springframework.webflow.core.collection.ParameterMap;
|
||||
import org.springframework.webflow.definition.TransitionDefinition;
|
||||
@@ -82,7 +77,7 @@ public abstract class AbstractMvcView implements View {
|
||||
|
||||
private ExpressionParser expressionParser = DefaultExpressionParserFactory.getExpressionParser();
|
||||
|
||||
private FormatterRegistry formatterRegistry;
|
||||
private ConversionService conversionService = DefaultConversionService.getSharedInstance();
|
||||
|
||||
private MappingResults mappingResults;
|
||||
|
||||
@@ -94,8 +89,6 @@ public abstract class AbstractMvcView implements View {
|
||||
|
||||
private String fieldMarkerPrefix = "_";
|
||||
|
||||
private ConversionExecutor bindingTypeConverter;
|
||||
|
||||
/**
|
||||
* Creates a new MVC view.
|
||||
* @param view the Spring MVC view to render
|
||||
@@ -118,9 +111,8 @@ public abstract class AbstractMvcView implements View {
|
||||
* Sets the formatter registry to use to expose formatters for field values.
|
||||
* @param formatterRegistry the formatter registry
|
||||
*/
|
||||
public void setFormatterRegistry(FormatterRegistry formatterRegistry) {
|
||||
this.formatterRegistry = formatterRegistry;
|
||||
bindingTypeConverter = new FormatterBackedMappingConversionExecutor(this.formatterRegistry);
|
||||
public void setConversionService(ConversionService conversionService) {
|
||||
this.conversionService = conversionService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -248,7 +240,7 @@ public abstract class AbstractMvcView implements View {
|
||||
Object modelObject = getModelObject();
|
||||
if (modelObject != null) {
|
||||
BindingModel bindingModel = new BindingModel(getModelExpression().getExpressionString(), modelObject,
|
||||
expressionParser, formatterRegistry, requestContext.getMessageContext());
|
||||
expressionParser, conversionService, requestContext.getMessageContext());
|
||||
bindingModel.setMappingResults(mappingResults);
|
||||
model.put(BindingResult.MODEL_KEY_PREFIX + getModelExpression().getExpressionString(), bindingModel);
|
||||
}
|
||||
@@ -283,6 +275,7 @@ public abstract class AbstractMvcView implements View {
|
||||
logger.debug("Setting up view->model mappings");
|
||||
}
|
||||
DefaultMapper mapper = new DefaultMapper();
|
||||
mapper.setConversionService(conversionService);
|
||||
ParameterMap requestParameters = requestContext.getRequestParameters();
|
||||
addDefaultMappings(mapper, requestParameters.asMap().keySet(), model);
|
||||
return mapper.map(requestParameters, model);
|
||||
@@ -357,7 +350,6 @@ public abstract class AbstractMvcView implements View {
|
||||
ParserContext parserContext = new FluentParserContext().evaluate(model.getClass());
|
||||
Expression target = expressionParser.parseExpression(parameter, parserContext);
|
||||
DefaultMapping mapping = new DefaultMapping(source, target);
|
||||
mapping.setTypeConverter(bindingTypeConverter);
|
||||
if (logger.isDebugEnabled()) {
|
||||
logger.debug("Adding mapping for parameter '" + parameter + "'");
|
||||
}
|
||||
@@ -460,78 +452,7 @@ public abstract class AbstractMvcView implements View {
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return parameterName;
|
||||
return "parameter:'" + parameterName + "'";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static class FormatterBackedMappingConversionExecutor implements ConversionExecutor {
|
||||
|
||||
private FormatterRegistry formatterRegistry;
|
||||
|
||||
public FormatterBackedMappingConversionExecutor(FormatterRegistry formatterRegistry) {
|
||||
this.formatterRegistry = formatterRegistry;
|
||||
}
|
||||
|
||||
public Object execute(Object source) throws ConversionExecutionException {
|
||||
throw new UnsupportedOperationException("Should never be called");
|
||||
}
|
||||
|
||||
public Object execute(Object source, Object context) throws ConversionExecutionException {
|
||||
if (source instanceof MultipartFile) {
|
||||
// for the case of MultipartFile parameters; nothing to do
|
||||
return source;
|
||||
}
|
||||
if (source instanceof String[]) {
|
||||
return source;
|
||||
}
|
||||
String formattedValue = (String) source;
|
||||
DefaultMappingContext mappingContext = (DefaultMappingContext) context;
|
||||
Expression target = mappingContext.getCurrentMapping().getTargetExpression();
|
||||
Class targetClass = getTargetClass();
|
||||
if (targetClass == null) {
|
||||
try {
|
||||
targetClass = target.getValueType(mappingContext.getTarget());
|
||||
} catch (EvaluationException e) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
if (targetClass == null) {
|
||||
return formattedValue;
|
||||
}
|
||||
Formatter formatter = getFormatter(target, targetClass);
|
||||
if (formatter != null) {
|
||||
try {
|
||||
return formatter.parse(formattedValue);
|
||||
} catch (InvalidFormatException e) {
|
||||
throw new ConversionExecutionException(formattedValue, String.class, targetClass, e);
|
||||
}
|
||||
} else {
|
||||
return formattedValue;
|
||||
}
|
||||
}
|
||||
|
||||
private Formatter getFormatter(Expression target, Class targetClass) {
|
||||
if (formatterRegistry != null) {
|
||||
Formatter formatter = formatterRegistry.getFormatter(targetClass, target.getExpressionString());
|
||||
if (formatter != null) {
|
||||
return formatter;
|
||||
} else {
|
||||
return formatterRegistry.getFormatter(targetClass);
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public Class getSourceClass() {
|
||||
return String.class;
|
||||
}
|
||||
|
||||
public Class getTargetClass() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,9 +15,9 @@
|
||||
*/
|
||||
package org.springframework.webflow.mvc.view;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
import org.springframework.webflow.execution.View;
|
||||
import org.springframework.webflow.execution.ViewFactory;
|
||||
@@ -35,22 +35,22 @@ public abstract class AbstractMvcViewFactory implements ViewFactory {
|
||||
|
||||
private ExpressionParser expressionParser;
|
||||
|
||||
private FormatterRegistry formatterRegistry;
|
||||
private ConversionService conversionService;
|
||||
|
||||
public AbstractMvcViewFactory(Expression viewId, FlowViewResolver viewResolver, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
ConversionService conversionService) {
|
||||
this.viewId = viewId;
|
||||
this.viewResolver = viewResolver;
|
||||
this.expressionParser = expressionParser;
|
||||
this.formatterRegistry = formatterRegistry;
|
||||
this.conversionService = conversionService;
|
||||
}
|
||||
|
||||
protected ExpressionParser getExpressionParser() {
|
||||
return expressionParser;
|
||||
}
|
||||
|
||||
protected FormatterRegistry getFormatterRegistry() {
|
||||
return formatterRegistry;
|
||||
protected ConversionService getConversionService() {
|
||||
return conversionService;
|
||||
}
|
||||
|
||||
public View getView(RequestContext context) {
|
||||
|
||||
@@ -19,11 +19,11 @@ import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.binding.convert.ConversionExecutor;
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.expression.support.FluentParserContext;
|
||||
import org.springframework.binding.format.Formatter;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.binding.mapping.MappingResult;
|
||||
import org.springframework.binding.mapping.MappingResults;
|
||||
import org.springframework.binding.mapping.MappingResultsCriteria;
|
||||
@@ -55,7 +55,7 @@ public class BindingModel extends AbstractErrors {
|
||||
|
||||
private ExpressionParser expressionParser;
|
||||
|
||||
private FormatterRegistry formatterRegistry;
|
||||
private ConversionService conversionService;
|
||||
|
||||
private MappingResults mappingResults;
|
||||
|
||||
@@ -70,13 +70,13 @@ public class BindingModel extends AbstractErrors {
|
||||
* @param messageContext the message context containing flow messages to display
|
||||
*/
|
||||
public BindingModel(String objectName, Object boundObject, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry, MessageContext messageContext) {
|
||||
ConversionService conversionService, MessageContext messageContext) {
|
||||
Assert.hasText(objectName, "The object name is required");
|
||||
Assert.notNull(boundObject, "The bound object instance is required");
|
||||
this.objectName = objectName;
|
||||
this.boundObject = boundObject;
|
||||
this.expressionParser = expressionParser;
|
||||
this.formatterRegistry = formatterRegistry;
|
||||
this.conversionService = conversionService;
|
||||
this.messageContext = messageContext;
|
||||
}
|
||||
|
||||
@@ -131,18 +131,18 @@ public class BindingModel extends AbstractErrors {
|
||||
}
|
||||
|
||||
private Object getFormattedValue(Expression fieldExpression) {
|
||||
Formatter formatter = getFormatter(fieldExpression);
|
||||
if (formatter != null) {
|
||||
return formatter.format(fieldExpression.getValue(boundObject));
|
||||
ConversionExecutor converter = getConverter(fieldExpression);
|
||||
if (converter != null) {
|
||||
return converter.execute(fieldExpression.getValue(boundObject));
|
||||
} else {
|
||||
return fieldExpression.getValue(boundObject);
|
||||
}
|
||||
}
|
||||
|
||||
private Formatter getFormatter(Expression fieldExpression) {
|
||||
if (formatterRegistry != null) {
|
||||
private ConversionExecutor getConverter(Expression fieldExpression) {
|
||||
if (conversionService != null) {
|
||||
Class valueType = fieldExpression.getValueType(boundObject);
|
||||
return formatterRegistry.getFormatter(valueType);
|
||||
return conversionService.getConversionExecutor(valueType, String.class);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -17,9 +17,9 @@ package org.springframework.webflow.test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.webflow.engine.builder.ViewFactoryCreator;
|
||||
import org.springframework.webflow.execution.Event;
|
||||
import org.springframework.webflow.execution.RequestContext;
|
||||
@@ -35,7 +35,7 @@ import org.springframework.webflow.execution.ViewFactory;
|
||||
class MockViewFactoryCreator implements ViewFactoryCreator {
|
||||
|
||||
public ViewFactory createViewFactory(Expression viewId, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
ConversionService conversionService) {
|
||||
return new MockViewFactory(viewId);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,8 +8,6 @@ import org.springframework.binding.convert.ConversionService;
|
||||
import org.springframework.binding.convert.service.DefaultConversionService;
|
||||
import org.springframework.binding.expression.Expression;
|
||||
import org.springframework.binding.expression.ExpressionParser;
|
||||
import org.springframework.binding.format.Formatter;
|
||||
import org.springframework.binding.format.FormatterRegistry;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
import org.springframework.webflow.engine.builder.ViewFactoryCreator;
|
||||
import org.springframework.webflow.engine.builder.support.FlowBuilderServices;
|
||||
@@ -39,13 +37,12 @@ public class FlowBuilderServicesBeanDefinitionParserTests extends TestCase {
|
||||
assertNotNull(builderServices.getExpressionParser());
|
||||
assertTrue(builderServices.getViewFactoryCreator() instanceof TestViewFactoryCreator);
|
||||
assertTrue(builderServices.getConversionService() instanceof TestConversionService);
|
||||
assertTrue(builderServices.getFormatterRegistry() instanceof TestFormatterRegistry);
|
||||
}
|
||||
|
||||
public static class TestViewFactoryCreator implements ViewFactoryCreator {
|
||||
|
||||
public ViewFactory createViewFactory(Expression viewIdExpression, ExpressionParser expressionParser,
|
||||
FormatterRegistry formatterRegistry) {
|
||||
ConversionService conversionService) {
|
||||
throw new UnsupportedOperationException("Auto-generated method stub");
|
||||
}
|
||||
|
||||
@@ -78,16 +75,4 @@ public class FlowBuilderServicesBeanDefinitionParserTests extends TestCase {
|
||||
|
||||
}
|
||||
|
||||
public static class TestFormatterRegistry implements FormatterRegistry {
|
||||
|
||||
public Formatter getFormatter(Class clazz) {
|
||||
throw new UnsupportedOperationException("Auto-generated method stub");
|
||||
}
|
||||
|
||||
public Formatter getFormatter(Class clazz, String id) {
|
||||
throw new UnsupportedOperationException("Auto-generated method stub");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -13,15 +13,12 @@
|
||||
<webflow:flow-builder-services id="flowBuilderServicesCustom"
|
||||
expression-parser="customExpressionParser"
|
||||
view-factory-creator="customViewFactoryCreator"
|
||||
conversion-service="customConversionService"
|
||||
formatter-registry="customFormatterRegistry"/>
|
||||
conversion-service="customConversionService" />
|
||||
|
||||
<bean id="customExpressionParser" class="org.springframework.webflow.expression.DefaultExpressionParserFactory" factory-method="getExpressionParser"/>
|
||||
|
||||
<bean id="customViewFactoryCreator" class="org.springframework.webflow.config.FlowBuilderServicesBeanDefinitionParserTests$TestViewFactoryCreator"/>
|
||||
|
||||
<bean id="customConversionService" class="org.springframework.webflow.config.FlowBuilderServicesBeanDefinitionParserTests$TestConversionService"/>
|
||||
|
||||
<bean id="customFormatterRegistry" class="org.springframework.webflow.config.FlowBuilderServicesBeanDefinitionParserTests$TestFormatterRegistry"/>
|
||||
|
||||
</beans>
|
||||
@@ -32,8 +32,8 @@ public class TextToTargetStateResolverTests extends TestCase {
|
||||
|
||||
public void testStatic() throws Exception {
|
||||
String expression = "mockState";
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convert(expression, TargetStateResolver.class,
|
||||
null);
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression,
|
||||
TargetStateResolver.class);
|
||||
MockRequestContext context = new MockRequestContext();
|
||||
Transition transition = new Transition();
|
||||
assertEquals("mockState", resolver.resolveTargetState(transition, null, context).getId());
|
||||
@@ -41,8 +41,8 @@ public class TextToTargetStateResolverTests extends TestCase {
|
||||
|
||||
public void testDynamic() throws Exception {
|
||||
String expression = "${flowScope.lastState}";
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convert(expression, TargetStateResolver.class,
|
||||
null);
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression,
|
||||
TargetStateResolver.class);
|
||||
MockRequestContext context = new MockRequestContext();
|
||||
context.getFlowScope().put("lastState", "mockState");
|
||||
Transition transition = new Transition();
|
||||
@@ -51,15 +51,15 @@ public class TextToTargetStateResolverTests extends TestCase {
|
||||
|
||||
public void testNull() throws Exception {
|
||||
String expression = null;
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convert(expression, TargetStateResolver.class,
|
||||
null);
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression,
|
||||
TargetStateResolver.class);
|
||||
assertNull(resolver);
|
||||
}
|
||||
|
||||
public void testEmpty() throws Exception {
|
||||
String expression = "";
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convert(expression, TargetStateResolver.class,
|
||||
null);
|
||||
TargetStateResolver resolver = (TargetStateResolver) converter.convertSourceToTargetClass(expression,
|
||||
TargetStateResolver.class);
|
||||
assertNull(resolver);
|
||||
}
|
||||
}
|
||||
@@ -41,43 +41,46 @@ public class TextToTransitionCriteriaTests extends TestCase {
|
||||
|
||||
public void testAny() throws Exception {
|
||||
String expression = "*";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
RequestContext ctx = getRequestContext();
|
||||
assertTrue("Criterion should evaluate to true", criterion.test(ctx));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convert("*", TransitionCriteria.class, null));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convert("", TransitionCriteria.class, null));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convert(null, TransitionCriteria.class, null));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convertSourceToTargetClass("*",
|
||||
TransitionCriteria.class));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convertSourceToTargetClass("",
|
||||
TransitionCriteria.class));
|
||||
assertSame(WildcardTransitionCriteria.INSTANCE, converter.convertSourceToTargetClass(null,
|
||||
TransitionCriteria.class));
|
||||
}
|
||||
|
||||
public void testStaticEventId() throws Exception {
|
||||
String expression = "sample";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
RequestContext ctx = getRequestContext();
|
||||
assertTrue("Criterion should evaluate to true", criterion.test(ctx));
|
||||
}
|
||||
|
||||
public void testTrueEvaluation() throws Exception {
|
||||
String expression = "${flowScope.foo == 'bar'}";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
RequestContext ctx = getRequestContext();
|
||||
assertTrue("Criterion should evaluate to true", criterion.test(ctx));
|
||||
}
|
||||
|
||||
public void testFalseEvaluation() throws Exception {
|
||||
String expression = "${flowScope.foo != 'bar'}";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
RequestContext ctx = getRequestContext();
|
||||
assertFalse("Criterion should evaluate to false", criterion.test(ctx));
|
||||
}
|
||||
|
||||
public void testNonStringEvaluation() throws Exception {
|
||||
String expression = "${3 + 4}";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
MockRequestContext ctx = getRequestContext();
|
||||
ctx.setCurrentEvent(new Event(this, "7"));
|
||||
assertTrue("Criterion should evaluate to true", criterion.test(ctx));
|
||||
@@ -85,8 +88,8 @@ public class TextToTransitionCriteriaTests extends TestCase {
|
||||
|
||||
public void testCurrenEventEval() throws Exception {
|
||||
String expression = "${currentEvent == 'submit'}";
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert(expression, TransitionCriteria.class,
|
||||
null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass(expression,
|
||||
TransitionCriteria.class);
|
||||
MockRequestContext ctx = getRequestContext();
|
||||
ctx.setCurrentEvent(new Event(this, "submit"));
|
||||
assertTrue("Criterion should evaluate to true", criterion.test(ctx));
|
||||
@@ -98,8 +101,8 @@ public class TextToTransitionCriteriaTests extends TestCase {
|
||||
return new StaticExpression(null);
|
||||
}
|
||||
});
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convert("doesnt matter",
|
||||
TransitionCriteria.class, null);
|
||||
TransitionCriteria criterion = (TransitionCriteria) converter.convertSourceToTargetClass("doesnt matter",
|
||||
TransitionCriteria.class);
|
||||
RequestContext ctx = getRequestContext();
|
||||
assertFalse("Criterion should evaluate to false", criterion.test(ctx));
|
||||
}
|
||||
|
||||
@@ -1,15 +1,11 @@
|
||||
package org.springframework.webflow.mvc.portlet;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import javax.portlet.RenderRequest;
|
||||
import javax.portlet.RenderResponse;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.easymock.EasyMock;
|
||||
import org.springframework.binding.format.formatters.DateFormatter;
|
||||
import org.springframework.binding.format.registry.DefaultFormatterRegistry;
|
||||
import org.springframework.mock.web.portlet.MockPortletContext;
|
||||
import org.springframework.mock.web.portlet.MockRenderRequest;
|
||||
import org.springframework.mock.web.portlet.MockRenderResponse;
|
||||
@@ -20,14 +16,6 @@ import org.springframework.webflow.test.MockRequestContext;
|
||||
|
||||
public class PortletMvcViewTests extends TestCase {
|
||||
|
||||
private DefaultFormatterRegistry formatterRegistry = new DefaultFormatterRegistry();
|
||||
|
||||
protected void setUp() {
|
||||
DateFormatter dateFormatter = new DateFormatter();
|
||||
dateFormatter.setLocale(Locale.ENGLISH);
|
||||
formatterRegistry.registerFormatter(dateFormatter);
|
||||
}
|
||||
|
||||
public void testRender() throws Exception {
|
||||
RenderRequest request = new MockRenderRequest();
|
||||
RenderResponse response = new MockRenderResponse();
|
||||
@@ -39,7 +27,6 @@ public class PortletMvcViewTests extends TestCase {
|
||||
org.springframework.web.servlet.View mvcView = (org.springframework.web.servlet.View) EasyMock
|
||||
.createMock(org.springframework.web.servlet.View.class);
|
||||
AbstractMvcView view = new PortletMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.render();
|
||||
assertNotNull(request.getAttribute(ViewRendererServlet.VIEW_ATTRIBUTE));
|
||||
assertNotNull(request.getAttribute(ViewRendererServlet.MODEL_ATTRIBUTE));
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.springframework.webflow.mvc.servlet;
|
||||
import java.security.Principal;
|
||||
import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -11,8 +10,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.binding.format.formatters.DateFormatter;
|
||||
import org.springframework.binding.format.registry.DefaultFormatterRegistry;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.springframework.mock.web.MockServletContext;
|
||||
@@ -28,14 +25,6 @@ public class ServletMvcViewTests extends TestCase {
|
||||
|
||||
private Map model;
|
||||
|
||||
private DefaultFormatterRegistry formatterRegistry = new DefaultFormatterRegistry();
|
||||
|
||||
protected void setUp() {
|
||||
DateFormatter dateFormatter = new DateFormatter();
|
||||
dateFormatter.setLocale(Locale.ENGLISH);
|
||||
formatterRegistry.registerFormatter(dateFormatter);
|
||||
}
|
||||
|
||||
public void testRender() throws Exception {
|
||||
MockRequestContext context = new MockRequestContext();
|
||||
context.getRequestScope().put("foo", "bar");
|
||||
@@ -50,7 +39,6 @@ public class ServletMvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new ServletMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.render();
|
||||
assertTrue(renderCalled);
|
||||
assertEquals("bar", model.get("foo"));
|
||||
|
||||
@@ -5,7 +5,6 @@ import java.util.Calendar;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -14,8 +13,6 @@ import javax.servlet.http.HttpServletResponse;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.springframework.binding.expression.support.StaticExpression;
|
||||
import org.springframework.binding.format.formatters.DateFormatter;
|
||||
import org.springframework.binding.format.registry.DefaultFormatterRegistry;
|
||||
import org.springframework.mock.web.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.MockHttpServletResponse;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
@@ -38,14 +35,6 @@ public class MvcViewTests extends TestCase {
|
||||
|
||||
private Map model;
|
||||
|
||||
private DefaultFormatterRegistry formatterRegistry = new DefaultFormatterRegistry();
|
||||
|
||||
protected void setUp() {
|
||||
DateFormatter dateFormatter = new DateFormatter();
|
||||
dateFormatter.setLocale(Locale.ENGLISH);
|
||||
formatterRegistry.registerFormatter(dateFormatter);
|
||||
}
|
||||
|
||||
public void testRender() throws Exception {
|
||||
MockRequestControlContext context = new MockRequestControlContext();
|
||||
context.setCurrentState(new ViewState(context.getRootFlow(), "test", new StubViewFactory()));
|
||||
@@ -61,7 +50,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.render();
|
||||
assertTrue(renderCalled);
|
||||
assertEquals("bar", model.get("foo"));
|
||||
@@ -91,7 +79,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockExternalContext().setNativeResponse(new MockHttpServletResponse());
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.render();
|
||||
assertTrue(renderCalled);
|
||||
assertEquals("bar", model.get("foo"));
|
||||
@@ -119,7 +106,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.render();
|
||||
assertEquals(context.getFlowScope().get("bindBean"), model.get("bindBean"));
|
||||
BindingModel bm = (BindingModel) model.get(BindingResult.MODEL_KEY_PREFIX + "bindBean");
|
||||
@@ -151,7 +137,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.processUserEvent();
|
||||
assertTrue(view.hasFlowEvent());
|
||||
assertEquals("submit", view.getFlowEvent().getId());
|
||||
@@ -165,10 +150,10 @@ public class MvcViewTests extends TestCase {
|
||||
context.putRequestParameter("dateProperty", "2007-01-01");
|
||||
context.putRequestParameter("beanProperty.name", "foo");
|
||||
context.putRequestParameter("multipartFile", new MockMultipartFile("foo", new byte[0]));
|
||||
// context.putRequestParameter("stringArrayProperty", new String[] { "foo", "bar", "baz" });
|
||||
// context.putRequestParameter("integerArrayProperty", new String[] { "1", "2", "3" });
|
||||
// context.putRequestParameter("primitiveArrayProperty", new String[] { "1", "2", "3" });
|
||||
// context.putRequestParameter("listProperty", new String[] { "1", "2", "3" });
|
||||
context.putRequestParameter("stringArrayProperty", new String[] { "foo", "bar", "baz" });
|
||||
context.putRequestParameter("integerArrayProperty", new String[] { "1", "2", "3" });
|
||||
context.putRequestParameter("primitiveArrayProperty", new String[] { "1", "2", "3" });
|
||||
context.putRequestParameter("listProperty", new String[] { "1", "2", "3" });
|
||||
BindBean bindBean = new BindBean();
|
||||
StaticExpression modelObject = new StaticExpression(bindBean);
|
||||
modelObject.setExpressionString("bindBean");
|
||||
@@ -180,7 +165,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.processUserEvent();
|
||||
assertTrue(view.hasFlowEvent());
|
||||
assertEquals("submit", view.getFlowEvent().getId());
|
||||
@@ -192,22 +176,22 @@ public class MvcViewTests extends TestCase {
|
||||
assertEquals(cal.getTime(), bindBean.getDateProperty());
|
||||
assertEquals("foo", bindBean.getBeanProperty().getName());
|
||||
assertEquals("foo", bindBean.getMultipartFile().getName());
|
||||
// assertEquals(3, bindBean.getStringArrayProperty().length);
|
||||
// assertEquals("foo", bindBean.getStringArrayProperty()[0]);
|
||||
// assertEquals("bar", bindBean.getStringArrayProperty()[1]);
|
||||
// assertEquals("baz", bindBean.getStringArrayProperty()[2]);
|
||||
// assertEquals(3, bindBean.getIntegerArrayProperty().length);
|
||||
// assertEquals(new Integer(1), bindBean.getIntegerArrayProperty()[0]);
|
||||
// assertEquals(new Integer(2), bindBean.getIntegerArrayProperty()[1]);
|
||||
// assertEquals(new Integer(3), bindBean.getIntegerArrayProperty()[2]);
|
||||
// assertEquals(3, bindBean.getPrimitiveArrayProperty().length);
|
||||
// assertEquals(1, bindBean.getPrimitiveArrayProperty()[0]);
|
||||
// assertEquals(2, bindBean.getPrimitiveArrayProperty()[1]);
|
||||
// assertEquals(3, bindBean.getPrimitiveArrayProperty()[2]);
|
||||
// assertEquals(3, bindBean.getListProperty().size());
|
||||
// assertEquals(new Integer(1), bindBean.getListProperty().get(0));
|
||||
// assertEquals(new Integer(2), bindBean.getListProperty().get(1));
|
||||
// assertEquals(new Integer(3), bindBean.getListProperty().get(2));
|
||||
assertEquals(3, bindBean.getStringArrayProperty().length);
|
||||
assertEquals("foo", bindBean.getStringArrayProperty()[0]);
|
||||
assertEquals("bar", bindBean.getStringArrayProperty()[1]);
|
||||
assertEquals("baz", bindBean.getStringArrayProperty()[2]);
|
||||
assertEquals(3, bindBean.getIntegerArrayProperty().length);
|
||||
assertEquals(new Integer(1), bindBean.getIntegerArrayProperty()[0]);
|
||||
assertEquals(new Integer(2), bindBean.getIntegerArrayProperty()[1]);
|
||||
assertEquals(new Integer(3), bindBean.getIntegerArrayProperty()[2]);
|
||||
assertEquals(3, bindBean.getPrimitiveArrayProperty().length);
|
||||
assertEquals(1, bindBean.getPrimitiveArrayProperty()[0]);
|
||||
assertEquals(2, bindBean.getPrimitiveArrayProperty()[1]);
|
||||
assertEquals(3, bindBean.getPrimitiveArrayProperty()[2]);
|
||||
assertEquals(3, bindBean.getListProperty().size());
|
||||
assertEquals("1", bindBean.getListProperty().get(0));
|
||||
assertEquals("2", bindBean.getListProperty().get(1));
|
||||
assertEquals("3", bindBean.getListProperty().get(2));
|
||||
}
|
||||
|
||||
public void testResumeEventModelBindingAllowedFields() throws Exception {
|
||||
@@ -228,7 +212,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
HashSet allowedBindFields = new HashSet();
|
||||
allowedBindFields.add("stringProperty");
|
||||
view.setAllowedBindFields(allowedBindFields);
|
||||
@@ -259,7 +242,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
HashSet allowedBindFields = new HashSet();
|
||||
allowedBindFields.add("booleanProperty");
|
||||
view.setAllowedBindFields(allowedBindFields);
|
||||
@@ -283,7 +265,6 @@ public class MvcViewTests extends TestCase {
|
||||
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
|
||||
org.springframework.web.servlet.View mvcView = new MockView();
|
||||
AbstractMvcView view = new MockMvcView(mvcView, context);
|
||||
view.setFormatterRegistry(formatterRegistry);
|
||||
view.processUserEvent();
|
||||
assertEquals(true, bindBean.getBooleanProperty());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user