You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by wo...@apache.org on 2018/01/30 14:28:24 UTC

incubator-freemarker git commit: FREEMARKER-55: correcting nested content/parameter handling

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 fe83bc9f7 -> 0288c9296


FREEMARKER-55: correcting nested content/parameter handling


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/0288c929
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/0288c929
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/0288c929

Branch: refs/heads/3
Commit: 0288c9296cde84d4abfc8740e58381d7286da678
Parents: fe83bc9
Author: Woonsan Ko <wo...@apache.org>
Authored: Tue Jan 30 09:28:16 2018 -0500
Committer: Woonsan Ko <wo...@apache.org>
Committed: Tue Jan 30 09:28:16 2018 -0500

----------------------------------------------------------------------
 .../form/ErrorsTemplateDirectiveModel.java      | 34 +++++++++-----------
 .../form/ErrorsTemplateDirectiveModelTest.java  |  9 +++---
 .../model/form/errors-directive-usages.ftlh     | 13 +++++---
 3 files changed, 29 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/0288c929/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModel.java
index 80ada12..8910214 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModel.java
@@ -20,7 +20,6 @@
 package org.apache.freemarker.spring.model.form;
 
 import java.io.IOException;
-import java.io.StringWriter;
 import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -142,25 +141,22 @@ class ErrorsTemplateDirectiveModel extends AbstractHtmlElementTemplateDirectiveM
         param = CallableUtils.getOptionalStringArgument(args, DELIMITER_PARAM_IDX, this);
         delimiter = (StringUtils.hasText(param)) ? param : DEFAULT_DELIMITER;
 
-        String nestedContent = null;
-
-        try {
-            List<String> messages = new ArrayList<String>();
-            messages.addAll(Arrays.asList(getBindStatus().getErrorMessages()));
-            SimpleCollection messagesModel = new SimpleCollection(messages, objectWrapperAndUnwrapper);
-            final TemplateModel[] nestedContentArgs = new TemplateModel[] { messagesModel };
-
-            StringWriter nestedOut = new StringWriter(1024);
-            callPlace.executeNestedContent(nestedContentArgs, nestedOut, env);
-            nestedContent = nestedOut.toString();
-        } finally {
-            if (StringUtils.hasText(nestedContent)) {
-                out.write(nestedContent);
-            } else {
-                TagOutputter tagOut = new TagOutputter(out);
-                renderDefaultContent(tagOut);
-            }
+        if (!callPlace.hasNestedContent()) {
+            TagOutputter tagOut = new TagOutputter(out);
+            renderDefaultContent(tagOut);
+            return;
+        }
+
+        if (callPlace.getNestedContentParameterCount() == 0) {
+            callPlace.executeNestedContent(null, out, env);
+            return;
         }
+
+        List<String> messages = new ArrayList<String>();
+        messages.addAll(Arrays.asList(getBindStatus().getErrorMessages()));
+        SimpleCollection messagesModel = new SimpleCollection(messages, objectWrapperAndUnwrapper);
+        final TemplateModel[] nestedContentArgs = new TemplateModel[] { messagesModel };
+        callPlace.executeNestedContent(nestedContentArgs, out, env);
     }
 
     public String getElement() {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/0288c929/freemarker-spring/src/test/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModelTest.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModelTest.java b/freemarker-spring/src/test/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModelTest.java
index 3ee929e..14c2331 100644
--- a/freemarker-spring/src/test/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModelTest.java
+++ b/freemarker-spring/src/test/java/org/apache/freemarker/spring/model/form/ErrorsTemplateDirectiveModelTest.java
@@ -64,11 +64,12 @@ public class ErrorsTemplateDirectiveModelTest {
                 .param("firstName", "").param("lastName", "").param("email", "")
                 .accept(MediaType.parseMediaType("text/html"))).andExpect(status().isOk())
                 .andExpect(content().contentTypeCompatibleWith("text/html")).andDo(print())
-                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors']/ul)").string(Matchers.containsString("First name")))
-                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors']/ul)").string(Matchers.containsString("Last name")))
-                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors']/ul)").string(Matchers.containsString("E-Mail")))
+                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors1']/ul)").string(Matchers.containsString("First name")))
+                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors1']/ul)").string(Matchers.containsString("Last name")))
+                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors1']/ul)").string(Matchers.containsString("E-Mail")))
+                .andExpect(xpath("string(//form[@id='form1']//div[@id='formErrors2']/p)").string(Matchers.containsString("some errors")))
                 .andExpect(xpath("//form[@id='form1']//span[@class='errorFirstName']/text()").string(Matchers.containsString("First name")))
                 .andExpect(xpath("//form[@id='form1']//span[@class='errorLastName']/text()").string(Matchers.containsString("Last name")))
-                .andExpect(xpath("//form[@id='form1']//span[@class='errorEmail']/text()").string(Matchers.containsString("E-Mail")));
+                .andExpect(xpath("//form[@id='form1']//div[@class='errorEmail']/text()").string(Matchers.containsString("E-Mail")));
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/0288c929/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/errors-directive-usages.ftlh
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/errors-directive-usages.ftlh b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/errors-directive-usages.ftlh
index 8b79f7e..62b5141 100644
--- a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/errors-directive-usages.ftlh
+++ b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/form/errors-directive-usages.ftlh
@@ -23,7 +23,7 @@
   <hr/>
 
   <@form.form 'user' id="form1">
-    <div id="formErrors">
+    <div id="formErrors1">
       <@form.errors '*'; messages>
         <ul>
           <#list messages as message>
@@ -32,6 +32,11 @@
         </ul>
       </...@form.errors>
     </div>
+    <div id="formErrors2">
+      <@form.errors '*'>
+        <p>There are some errors.</p>
+      </...@form.errors>
+    </div>
     <table>
       <tr>
         <th>
@@ -39,7 +44,7 @@
         </th>
         <td>
           <@form.input 'firstName' />
-          <@form.errors 'firstName' cssClass="errorFirstName"; messages />
+          <@form.errors 'firstName' cssClass="errorFirstName" />
         </td>
       </tr>
       <tr>
@@ -48,7 +53,7 @@
         </th>
         <td>
           <@form.input 'lastName' />
-          <@form.errors 'lastName' cssClass="errorLastName"; messages />
+          <@form.errors 'lastName' cssClass="errorLastName" />
         </td>
       </tr>
       <tr>
@@ -57,7 +62,7 @@
         </th>
         <td>
           <@form.input 'email' />
-          <@form.errors 'email' cssClass="errorEmail"; messages />
+          <@form.errors 'email' element="div" cssClass="errorEmail" />
         </td>
       </tr>
     </table>