diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/freemarker/spring.ftl b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/freemarker/spring.ftl
index c69850a6b24..e0f4501b356 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/freemarker/spring.ftl
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/freemarker/spring.ftl
@@ -296,6 +296,23 @@
#macro>
+<#--
+ * formCheckbox
+ *
+ * Show a single checkbox.
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+-->
+<#macro formCheckbox path attributes="">
+ <@bind path />
+ <#local checked><#if status.value?? && status.value?string=="true">true<#else>false#if>#local>
+ <#local id><#if status.expression??>${status.expression}<#else>${path}#if>#local>
+
+
+#macro>
+
<#--
* showErrors
*
diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/velocity/spring.vm b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/velocity/spring.vm
index 4b90fc60c6d..a8d0a1305a1 100644
--- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/velocity/spring.vm
+++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/velocity/spring.vm
@@ -269,6 +269,21 @@
#end
+#**
+ * springFormCheckbox
+ *
+ * Show a single checkbox.
+ *
+ * @param path the name of the field to bind to
+ * @param attributes any additional attributes for the element (such as class
+ * or CSS styles or size
+*#
+#macro( springFormCheckbox $path $attributes )
+ #springBind($path)
+
+
+#end
+
#**
* springShowErrors
*
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java
index 65adaec3ed9..5d162cdb2cc 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/FreeMarkerMacroTests.java
@@ -140,6 +140,7 @@ public class FreeMarkerMacroTests extends TestCase {
TestBean tb = new TestBean("Darren", 99);
tb.setSpouse(new TestBean("Fred"));
+ tb.setJedi(true);
request.setAttribute("command", tb);
HashMap names = new HashMap();
@@ -192,6 +193,10 @@ public class FreeMarkerMacroTests extends TestCase {
if (tokens[i].equals("FORM11")) assertEquals("", tokens[i + 1]);
if (tokens[i].equals("FORM12")) assertEquals("", tokens[i + 1]);
if (tokens[i].equals("FORM13")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM15")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM15")) assertEquals("", tokens[i + 2]);
+ if (tokens[i].equals("FORM16")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM16")) assertEquals("", tokens[i + 2]);
}
}
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/test.ftl b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/test.ftl
index 33def4869b6..7394b65423a 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/test.ftl
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/freemarker/test.ftl
@@ -77,3 +77,9 @@ FORM13
FORM14
<@spring.formSingleSelect "command.name", options, ""/>
+
+FORM15
+<@spring.formCheckbox "command.name"/>
+
+FORM16
+<@spring.formCheckbox "command.jedi"/>
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/VelocityMacroTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/VelocityMacroTests.java
index bbbe61adf4b..e8406f4c79b 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/VelocityMacroTests.java
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/VelocityMacroTests.java
@@ -133,6 +133,7 @@ public class VelocityMacroTests extends TestCase {
rc.setContextPath("/springtest");
TestBean tb = new TestBean("Darren", 99);
+ tb.setJedi(true);
request.setAttribute("command", tb);
HashMap names = new HashMap();
@@ -178,6 +179,10 @@ public class VelocityMacroTests extends TestCase {
//TODO verify remaining output (fix whitespace)
if (tokens[i].equals("FORM9")) assertEquals("", tokens[i + 1]);
if (tokens[i].equals("FORM10")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM15")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM15")) assertEquals("", tokens[i + 2]);
+ if (tokens[i].equals("FORM16")) assertEquals("", tokens[i + 1]);
+ if (tokens[i].equals("FORM16")) assertEquals("", tokens[i + 2]);
}
}
diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/test.vm b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/test.vm
index d2ce995661e..401b74134a9 100644
--- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/test.vm
+++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/velocity/test.vm
@@ -53,5 +53,12 @@ FORM9
FORM10
#springFormHiddenInput("command.name" "")
+FORM15
+#springFormCheckbox("command.name" "")
+
+FORM16
+#springFormCheckbox("command.jedi" "")
+
+
ERRORS
#springShowErrors(" " "")