Consistent iteration over actualValue in Velocity and FreeMarker macros

This requires consistent exposure of an actualValue in BindStatus, even if no BindingResult available.

Issue: SPR-10837
(cherry picked from commit 4f60b98)
This commit is contained in:
Juergen Hoeller
2014-01-31 22:39:20 +01:00
parent b3fb81bf72
commit 3af9d1f29b
6 changed files with 51 additions and 54 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,27 +16,26 @@
package org.springframework.web.servlet.view.freemarker;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.junit.Before;
import org.junit.Test;
import org.springframework.tests.sample.beans.TestBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mock.web.test.MockHttpServletRequest;
import org.springframework.mock.web.test.MockHttpServletResponse;
import org.springframework.mock.web.test.MockServletContext;
import org.springframework.tests.sample.beans.TestBean;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.StaticWebApplicationContext;
@@ -47,10 +46,7 @@ import org.springframework.web.servlet.support.RequestContext;
import org.springframework.web.servlet.theme.FixedThemeResolver;
import org.springframework.web.servlet.view.DummyMacroRequestContext;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import static org.junit.Assert.*;
/**
* @author Darren Davison
@@ -69,6 +65,7 @@ public class FreeMarkerMacroTests {
private FreeMarkerConfigurer fc;
@Before
public void setUp() throws Exception {
wac = new StaticWebApplicationContext();
@@ -219,6 +216,7 @@ public class FreeMarkerMacroTests {
}
// TODO verify remaining output (fix whitespace)
@Test
public void testForm9() throws Exception {
assertEquals("<input type=\"password\" id=\"name\" name=\"name\" value=\"\" >", getMacroOutput("FORM9"));
@@ -272,8 +270,8 @@ public class FreeMarkerMacroTests {
assertTrue("Wrong output: " + output, output.contains("<input type=\"checkbox\" id=\"spouses0.jedi\" name=\"spouses[0].jedi\" checked=\"checked\" />"));
}
private String getMacroOutput(String name) throws Exception {
private String getMacroOutput(String name) throws Exception {
String macro = fetchMacro(name);
assertNotNull(macro);
@@ -296,6 +294,7 @@ public class FreeMarkerMacroTests {
fred.setJedi(true);
darren.setSpouse(fred);
darren.setJedi(true);
darren.setStringArray(new String[] {"John", "Fred"});
request.setAttribute("command", darren);
Map<String, String> names = new HashMap<String, String>();

View File

@@ -61,7 +61,7 @@ FORM7
<@spring.formRadioButtons "command.name", nameOptionMap, " ", ""/>
FORM8
<@spring.formCheckboxes "command.spouses", nameOptionMap, " ", ""/>
<@spring.formCheckboxes "command.stringArray", nameOptionMap, " ", ""/>
FORM9
<@spring.formPasswordInput "command.name", ""/>

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,7 +18,6 @@ package org.springframework.web.servlet.view.velocity;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
@@ -27,10 +26,10 @@ import org.apache.velocity.Template;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.context.Context;
import org.springframework.tests.sample.beans.TestBean;
import org.springframework.mock.web.test.MockHttpServletRequest;
import org.springframework.mock.web.test.MockHttpServletResponse;
import org.springframework.mock.web.test.MockServletContext;
import org.springframework.tests.sample.beans.TestBean;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.StaticWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
@@ -94,7 +93,7 @@ public class VelocityMacroTests extends TestCase {
vv.setApplicationContext(wac);
vv.setExposeSpringMacroHelpers(true);
Map model = new HashMap();
Map<String, Object> model = new HashMap<String, Object>();
model.put("tb", new TestBean("juergen", 99));
vv.render(model, request, response);
}
@@ -112,7 +111,7 @@ public class VelocityMacroTests extends TestCase {
vv.setApplicationContext(wac);
vv.setExposeSpringMacroHelpers(true);
Map model = new HashMap();
Map<String, Object> model = new HashMap<String, Object>();
model.put(VelocityView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE, helperTool);
try {
@@ -126,11 +125,11 @@ public class VelocityMacroTests extends TestCase {
public void testAllMacros() throws Exception {
DummyMacroRequestContext rc = new DummyMacroRequestContext(request);
Map msgMap = new HashMap();
Map<String, String> msgMap = new HashMap<String, String>();
msgMap.put("hello", "Howdy");
msgMap.put("world", "Mundo");
rc.setMessageMap(msgMap);
Map themeMsgMap = new HashMap();
Map<String, String> themeMsgMap = new HashMap<String, String>();
themeMsgMap.put("hello", "Howdy!");
themeMsgMap.put("world", "Mundo!");
rc.setThemeMessageMap(themeMsgMap);
@@ -138,9 +137,10 @@ public class VelocityMacroTests extends TestCase {
TestBean tb = new TestBean("Darren", 99);
tb.setJedi(true);
tb.setStringArray(new String[] {"John", "Fred"});
request.setAttribute("command", tb);
HashMap names = new HashMap();
Map<String, String> names = new HashMap<String, String>();
names.put("Darren", "Darren Davison");
names.put("John", "John Doe");
names.put("Fred", "Fred Bloggs");
@@ -149,7 +149,7 @@ public class VelocityMacroTests extends TestCase {
vc.setPreferFileSystemAccess(false);
VelocityEngine ve = vc.createVelocityEngine();
Map model = new HashMap();
Map<String, Object> model = new HashMap<String, Object>();
model.put("command", tb);
model.put("springMacroRequestContext", rc);
model.put("nameOptionMap", names);

View File

@@ -45,7 +45,7 @@ FORM7
#springFormRadioButtons("command.name" $nameOptionMap " " "")
FORM8
#springFormCheckboxes("command.spouses" $nameOptionMap " " "")
#springFormCheckboxes("command.stringArray" $nameOptionMap " " "")
FORM9
#springFormPasswordInput("command.name" "")