Fix tags that have a closing

git-svn-id: https://svn.apache.org/repos/asf/struts/sandbox/trunk@727729 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java
index 8c0a784..63246f4 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/AnchorHandler.java
@@ -40,6 +40,12 @@
                 .addIfExists("title", params.get("title"))

                 .addIfExists("tabindex", params.get("tabindex"));

         start("a", attrs);

-        end("a");

+    }

+

+    public static class CloseHandler extends AbstractTagHandler implements TagGenerator {

+        @Override

+        public void generate() throws IOException {

+            end("a");

+        }

     }

 }

diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/DivHandler.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/DivHandler.java
index db14f18..9aa18b4 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/DivHandler.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/DivHandler.java
@@ -37,6 +37,12 @@
                 .addIfExists("style", params.get("cssStyle"))

                 .addIfExists("title", params.get("title"));

         start("div", attrs);

-        end("div");

+    }

+

+    public static class CloseHandler extends AbstractTagHandler implements TagGenerator {

+        @Override

+        public void generate() throws IOException {

+            end("div");

+        }

     }

 }

diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/EmptyHandler.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/EmptyHandler.java
index b7ea425..eb81481 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/EmptyHandler.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/EmptyHandler.java
@@ -20,6 +20,13 @@
  */
 package org.apache.struts2.views.java.simple;
 
+import org.apache.struts2.views.java.TagGenerator;
+
+import java.io.IOException;
+
 //does nothing
-public class EmptyHandler extends AbstractTagHandler {
+public class EmptyHandler extends AbstractTagHandler implements TagGenerator {
+    @Override
+    public void generate() throws IOException {
+    }
 }
diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/FormHandler.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/FormHandler.java
index df192fd..febf734 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/FormHandler.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/FormHandler.java
@@ -44,6 +44,12 @@
                 .addIfExists("accept-charset", params.get("acceptcharset"));
         attrs.add("method", params.containsKey("method") ? (String) params.get("method") : "post");
         start("form", attrs);
-        end("form");
+    }
+
+    public static class CloseHandler extends AbstractTagHandler implements TagGenerator {
+        @Override
+        public void generate() throws IOException {
+            end("form");
+        }
     }
 }
diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java
index 1cb5eff..015b577 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SimpleTheme.java
@@ -37,13 +37,16 @@
             put("textfield", new FactoryList(TextFieldHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("select", new FactoryList(SelectHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("form", new FactoryList(FormHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
+            put("form-close", new FactoryList(FormHandler.CloseHandler.class));
             put("a", new FactoryList(AnchorHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
+            put("a-close", new FactoryList(AnchorHandler.CloseHandler.class));
             put("checkbox", new FactoryList(CheckboxHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("file", new FactoryList(FileHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("password", new FactoryList(PasswordHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("label", new FactoryList(LabelHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("reset", new FactoryList(ResetHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("submit", new FactoryList(SubmitHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
+            put("submit-close", new FactoryList(SubmitHandler.CloseHandler.class));
             put("textarea", new FactoryList(TextAreaHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
             put("actionerror", new FactoryList(ActionErrorHandler.class));
             put("token", new FactoryList(TokenHandler.class));
@@ -52,6 +55,7 @@
             put("hidden", new FactoryList(HiddenHandler.class));
             put("fielderror", new FactoryList(FieldErrorHandler.class));
             put("div", new FactoryList(DivHandler.class, ScriptingEventsHandler.class, CommonAttributesHandler.class));
+            put("div-close", new FactoryList(DivHandler.CloseHandler.class));
             put("empty", new FactoryList(EmptyHandler.class));
         }});
         setName("simple");
diff --git a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java
index 30e705a..5b35566 100644
--- a/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java
+++ b/struts2-javatemplates-plugin/src/main/java/org/apache/struts2/views/java/simple/SubmitHandler.java
@@ -57,8 +57,6 @@
                 if (TextUtils.stringSet(label))

                     characters(label, false);

             }

-

-            end("button");

         } else if ("image".equals(type)) {

             if (TextUtils.stringSet(body))

                 characters(body, false);

@@ -67,7 +65,6 @@
                     .addIfExists("alt", params.get("label"));

 

             start("input", attrs);

-            end("input");

         } else {

             attrs.addIfExists("name", params.get("name"))

                     .addIfExists("value", params.get("nameValue"), false)

@@ -78,7 +75,22 @@
                     .addIfExists("style", params.get("cssStyle"));

 

             start("submit", attrs);

-            end("submit");

+        }

+    }

+

+    public static class CloseHandler extends AbstractTagHandler implements TagGenerator {

+        @Override

+        public void generate() throws IOException {

+            Map<String, Object> params = context.getParameters();

+            Attributes attrs = new Attributes();

+

+            String type = TextUtils.noNull((String) params.get("type"), "input");

+            if ("button".equals(type))

+                end("button");

+            else if ("image".equals(type))

+                end("input");

+            else

+                end("submit");

         }

     }

 }

diff --git a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
index 6fc1eee..861807c 100644
--- a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
+++ b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AbstractTest.java
@@ -147,6 +147,7 @@
             return val == null ? null : val;
     }
 
+    //XWorkConverter doesnt have a public onstructor (the one with parameters will require mor config)
     public class ConverterEx extends XWorkConverter {
         public ConverterEx() {
 
diff --git a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java
index fe23759..d8520c4 100644
--- a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java
+++ b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/AnchorTest.java
@@ -39,6 +39,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<a name='name_' id='id_' class='class' style='style' href='http://sometest.com?ab=10' title='title' tabindex='1'></a>");

         assertEquals(expected, output);

diff --git a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/DivTest.java b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/DivTest.java
index 50250a5..ff97895 100644
--- a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/DivTest.java
+++ b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/DivTest.java
@@ -37,6 +37,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<div name='name_' id='id_' class='class' style='style' title='title'></div>");

         assertEquals(expected, output);

diff --git a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/FormTest.java b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/FormTest.java
index a670ff7..af8f303 100644
--- a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/FormTest.java
+++ b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/FormTest.java
@@ -47,6 +47,7 @@
         tag.evaluateParams();
         map.putAll(tag.getParameters());
         theme.renderTag(getTagName(), context);
+        theme.renderTag(getTagName() + "-close", context);
         String output = writer.getBuffer().toString();
         String expected = s("<form name='name_' id='id_' onsubmit='submit' onreset='reset' target='target_' enctype='enc' class='class_' style='style_' title='title' accept-charset='charset_' method='post'></form>");
         assertEquals(expected, output);
@@ -56,6 +57,7 @@
         tag.evaluateParams();
         map.putAll(tag.getParameters());
         theme.renderTag(getTagName(), context);
+        theme.renderTag(getTagName() + "-close", context);
         String output = writer.getBuffer().toString();
         String expected = s("<form method='post'></form>");
         assertEquals(expected, output);
diff --git a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SubmitTest.java b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SubmitTest.java
index f89ff0d..4a43cff 100644
--- a/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SubmitTest.java
+++ b/struts2-javatemplates-plugin/src/test/java/org/apache/struts2/views/java/simple/SubmitTest.java
@@ -44,6 +44,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<button name='name' type='submit' value='val1' tabindex='1' id='id1' class='class1' style='style1'><span>hey hey hey, here I go now</span></button>");

         assertEquals(expected, output);

@@ -65,6 +66,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<button name='name' type='submit' value='val1' tabindex='1' id='id1' class='class1' style='style1'>Just as soon as I belong, than its time I disappear</button>");

         assertEquals(expected, output);

@@ -86,6 +88,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<submit name='name' value='val1' tabindex='1' id='id1' class='class1' style='style1'></submit>");

         assertEquals(expected, output);

@@ -106,6 +109,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<submit name='name' value='val1' tabindex='1' id='id1' class='class1' style='style1'></submit>");

         assertEquals(expected, output);

@@ -120,6 +124,7 @@
         tag.evaluateParams();

         map.putAll(tag.getParameters());

         theme.renderTag(getTagName(), context);

+        theme.renderTag(getTagName() + "-close", context);

         String output = writer.getBuffer().toString();

         String expected = s("<input src='http://somesource/image.gif' type='image' alt='alt text'></input>");

         assertEquals(expected, output);