Keith Donald
2008-04-20 04:57:41 +00:00
parent afba44b167
commit 655d1ef795
2 changed files with 47 additions and 3 deletions

View File

@@ -23,7 +23,6 @@ import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.binding.collection.MapAdaptable;
import org.springframework.binding.convert.ConversionException;
import org.springframework.binding.convert.ConversionExecutor;
import org.springframework.binding.expression.EvaluationException;
@@ -237,8 +236,7 @@ public abstract class MvcView implements View {
private void addDefaultMappings(DefaultMapper mapper, ParameterMap requestParameters, Object model) {
for (Iterator it = requestParameters.asMap().keySet().iterator(); it.hasNext();) {
String name = (String) it.next();
Expression source = expressionParser.parseExpression(name, new FluentParserContext()
.evaluate(MapAdaptable.class));
Expression source = new RequestParameterExpression(name);
Expression target = expressionParser.parseExpression(name, new FluentParserContext().evaluate(model
.getClass()));
DefaultMapping mapping = new DefaultMapping(source, target);
@@ -360,6 +358,33 @@ public abstract class MvcView implements View {
}
}
private static class RequestParameterExpression implements Expression {
private String parameterName;
public RequestParameterExpression(String parameterName) {
this.parameterName = parameterName;
}
public String getExpressionString() {
return parameterName;
}
public Object getValue(Object context) throws EvaluationException {
ParameterMap map = (ParameterMap) context;
return map.get(parameterName);
}
public Class getValueType(Object context) {
return String.class;
}
public void setValue(Object context, Object value) throws EvaluationException {
throw new UnsupportedOperationException("Not supported");
}
}
private static class FormatterBackedMappingConversionExecutor implements ConversionExecutor {
private FormatterRegistry formatterRegistry;

View File

@@ -127,6 +127,7 @@ public class MvcViewTests extends TestCase {
context.putRequestParameter("stringProperty", "foo");
context.putRequestParameter("integerProperty", "5");
context.putRequestParameter("dateProperty", "2007-01-01");
context.putRequestParameter("beanProperty.name", "foo");
BindBean bindBean = new BindBean();
StaticExpression modelObject = new StaticExpression(bindBean);
modelObject.setExpressionString("bindBean");
@@ -148,6 +149,7 @@ public class MvcViewTests extends TestCase {
cal.clear();
cal.set(Calendar.YEAR, 2007);
assertEquals(cal.getTime(), bindBean.getDateProperty());
assertEquals("foo", bindBean.getBeanProperty().getName());
}
private class MockMvcView extends MvcView {
@@ -180,12 +182,14 @@ public class MvcViewTests extends TestCase {
private String stringProperty;
private Integer integerProperty = new Integer(3);
private Date dateProperty;
private NestedBean beanProperty;
public BindBean() {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2008);
dateProperty = cal.getTime();
beanProperty = new NestedBean();
}
public String getStringProperty() {
@@ -212,6 +216,21 @@ public class MvcViewTests extends TestCase {
this.dateProperty = dateProperty;
}
public NestedBean getBeanProperty() {
return beanProperty;
}
}
public static class NestedBean {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}