From 04bc4bd97c41bd181dd45580ce12236218177aca Mon Sep 17 00:00:00 2001 From: Yasser Zamani Date: Sun, 25 Apr 2021 14:56:47 +0430 Subject: [PATCH] [WW-5125] use .get(...) instead of [...] for fieldErrors All [ occurrences in all ftl files reviewed. Only fieldErrors had used [...] which replaced by .get(...) to fix WW-5125 as well as aligning with other ftl files conduct. --- .../ajaxErrorContainers/controlfooter.ftl | 4 +- .../controlheader-core.ftl | 4 +- .../resources/template/css_xhtml/checkbox.ftl | 4 +- .../template/css_xhtml/controlfooter.ftl | 4 +- .../template/css_xhtml/controlheader-core.ftl | 4 +- .../main/resources/template/simple/css.ftl | 2 +- .../resources/template/simple/fielderror.ftl | 4 +- .../resources/template/xhtml/checkbox.ftl | 4 +- .../template/xhtml/controlfooter.ftl | 4 +- .../template/xhtml/controlheader-core.ftl | 4 +- .../struts2/views/jsp/ui/TextfieldTest.java | 18 ++++- .../views/jsp/ui/Textfield-WW-5125.txt | 80 +++++++++++++++++++ 12 files changed, 116 insertions(+), 20 deletions(-) create mode 100644 core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-WW-5125.txt diff --git a/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlfooter.ftl b/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlfooter.ftl index 588b400c0..ccba70757 100644 --- a/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlfooter.ftl +++ b/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlfooter.ftl @@ -22,12 +22,12 @@ ${parameters.after!}<#t/> <#lt/> <#if (parameters.errorposition!"top") == 'bottom'> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if hasFieldErrors> <#rt/> <#if hasFieldErrors> - <#list fieldErrors[parameters.name] as error> + <#list fieldErrors.get(parameters.name) as error>
${error}
<#t/> diff --git a/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlheader-core.ftl b/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlheader-core.ftl index 4ea2e6db5..3b6ffb4c9 100644 --- a/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlheader-core.ftl +++ b/apps/showcase/src/main/resources/template/ajaxErrorContainers/controlheader-core.ftl @@ -21,12 +21,12 @@ <#-- Always include elements to show errors. They may be filled later via AJAX. --> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if (parameters.errorposition!"top") == 'top'> <#rt/> <#if hasFieldErrors> - <#list fieldErrors[parameters.name] as error> + <#list fieldErrors.get(parameters.name) as error>
${error}
<#t/> diff --git a/core/src/main/resources/template/css_xhtml/checkbox.ftl b/core/src/main/resources/template/css_xhtml/checkbox.ftl index fc2b0c58c..8fe7000d4 100644 --- a/core/src/main/resources/template/css_xhtml/checkbox.ftl +++ b/core/src/main/resources/template/css_xhtml/checkbox.ftl @@ -23,12 +23,12 @@ NOTE: The 'header' stuff that follows is in this one file for checkbox due to th that for checkboxes we do not want the label field to show up as checkboxes handle their own lables --> -<#assign hasFieldErrors = fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = fieldErrors?? && fieldErrors.get(parameters.name)??/>
<#if parameters.id??>id="wwgrp_${parameters.id}"<#rt/> class="wwgrp"> <#if hasFieldErrors>
<#if parameters.id??>id="wwerr_${parameters.id}"<#rt/> class="wwerr"> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#if parameters.id??> errorFor="${parameters.id}"<#rt/> diff --git a/core/src/main/resources/template/css_xhtml/controlfooter.ftl b/core/src/main/resources/template/css_xhtml/controlfooter.ftl index d90fa7b55..492a0dbee 100644 --- a/core/src/main/resources/template/css_xhtml/controlfooter.ftl +++ b/core/src/main/resources/template/css_xhtml/controlfooter.ftl @@ -31,10 +31,10 @@ ${parameters.after!}<#t/> <#rt/> <#if (parameters.errorposition!"top") == 'bottom'> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if hasFieldErrors>
<#if parameters.id??>id="wwerr_${parameters.id}"<#rt/> class="wwerr"> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#if parameters.id??> errorFor="${parameters.id}"<#rt/> diff --git a/core/src/main/resources/template/css_xhtml/controlheader-core.ftl b/core/src/main/resources/template/css_xhtml/controlheader-core.ftl index d7aacf602..daf775299 100644 --- a/core/src/main/resources/template/css_xhtml/controlheader-core.ftl +++ b/core/src/main/resources/template/css_xhtml/controlheader-core.ftl @@ -22,13 +22,13 @@ Only show message if errors are available. This will be done if ActionSupport is used. --> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/>
<#if parameters.id??>id="wwgrp_${parameters.id}"<#rt/> class="wwgrp"> <#if (parameters.errorposition!"top") == 'top'> <#if hasFieldErrors>
<#if parameters.id??>id="wwerr_${parameters.id}"<#rt/> class="wwerr"> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#if parameters.id??> errorFor="${parameters.id}"<#rt/> diff --git a/core/src/main/resources/template/simple/css.ftl b/core/src/main/resources/template/simple/css.ftl index 9980c737b..fdd3bb888 100644 --- a/core/src/main/resources/template/simple/css.ftl +++ b/core/src/main/resources/template/simple/css.ftl @@ -18,7 +18,7 @@ * under the License. */ --> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if parameters.cssClass?has_content && !(hasFieldErrors && parameters.cssErrorClass??)> class="${parameters.cssClass}"<#rt/> <#elseif parameters.cssClass?has_content && (hasFieldErrors && parameters.cssErrorClass??)> diff --git a/core/src/main/resources/template/simple/fielderror.ftl b/core/src/main/resources/template/simple/fielderror.ftl index 41951a46c..dbda26a7b 100644 --- a/core/src/main/resources/template/simple/fielderror.ftl +++ b/core/src/main/resources/template/simple/fielderror.ftl @@ -29,7 +29,7 @@ <#list eKeys as eKey><#t/> <#if (eKey = fieldErrorFieldName)><#t/> <#assign haveMatchedErrorField=true><#t/> - <#assign eValue = fieldErrors[fieldErrorFieldName]><#t/> + <#assign eValue = fieldErrors.get(fieldErrorFieldName)><#t/> <#if (haveMatchedErrorField && (!doneStartUlTag))><#t/> <#if parameters.id?has_content> @@ -69,7 +69,7 @@ > <#list eKeys as eKey><#t/> - <#assign eValue = fieldErrors[eKey]><#t/> + <#assign eValue = fieldErrors.get(eKey)><#t/> <#list eValue as eEachValue><#t/>
  • <#if parameters.escape>${eEachValue!}<#else>${eEachValue!?no_esc}
  • <#t/> diff --git a/core/src/main/resources/template/xhtml/checkbox.ftl b/core/src/main/resources/template/xhtml/checkbox.ftl index edaa5182c..ceef16849 100644 --- a/core/src/main/resources/template/xhtml/checkbox.ftl +++ b/core/src/main/resources/template/xhtml/checkbox.ftl @@ -18,9 +18,9 @@ * under the License. */ --> -<#assign hasFieldErrors = fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if hasFieldErrors> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#if parameters.id??> errorFor="${parameters.id}"<#rt/> diff --git a/core/src/main/resources/template/xhtml/controlfooter.ftl b/core/src/main/resources/template/xhtml/controlfooter.ftl index 10cf7f9e9..65d657a72 100644 --- a/core/src/main/resources/template/xhtml/controlfooter.ftl +++ b/core/src/main/resources/template/xhtml/controlfooter.ftl @@ -22,9 +22,9 @@ ${parameters.after!}<#t/> <#lt/> <#if (parameters.errorposition!"top") == 'bottom'> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if hasFieldErrors> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#rt/> ${error}<#t/> diff --git a/core/src/main/resources/template/xhtml/controlheader-core.ftl b/core/src/main/resources/template/xhtml/controlheader-core.ftl index 986ed1540..894f3faee 100644 --- a/core/src/main/resources/template/xhtml/controlheader-core.ftl +++ b/core/src/main/resources/template/xhtml/controlheader-core.ftl @@ -22,10 +22,10 @@ Only show message if errors are available. This will be done if ActionSupport is used. --> -<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors[parameters.name]??/> +<#assign hasFieldErrors = parameters.name?? && fieldErrors?? && fieldErrors.get(parameters.name)??/> <#if (parameters.errorposition!"top") == 'top'> <#if hasFieldErrors> -<#list fieldErrors[parameters.name] as error> +<#list fieldErrors.get(parameters.name) as error> <#rt/> ${error}<#t/> diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java index 8bbefcbab..bd52b8ad9 100644 --- a/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java +++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/TextfieldTest.java @@ -145,7 +145,23 @@ public class TextfieldTest extends AbstractUITagTest { verify(TextFieldTag.class.getResource("Textfield-1.txt")); } - + + public void testWW5125() throws Exception { + TestAction testAction = (TestAction) action; + + for(String fieldName : new String[] {"clone", "size", "clear", "values", "hashCode", "isEmpty", "keySet", "entrySet"}) { + testAction.addFieldError(fieldName, fieldName + " error"); + + TextFieldTag tag = new TextFieldTag(); + tag.setPageContext(pageContext); + tag.setName(fieldName); + tag.doStartTag(); + tag.doEndTag(); + } + + verify(TextFieldTag.class.getResource("Textfield-WW-5125.txt")); + } + public void testSimple_recursionTest() throws Exception { TestAction testAction = (TestAction) action; testAction.setFoo("%{1+1}"); diff --git a/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-WW-5125.txt b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-WW-5125.txt new file mode 100644 index 000000000..5944419f2 --- /dev/null +++ b/core/src/test/resources/org/apache/struts2/views/jsp/ui/Textfield-WW-5125.txt @@ -0,0 +1,80 @@ + + clone error + + + + + + + + size error + + + + + + + + clear error + + + + + + + + values error + + + + + + + + hashCode error + + + + + + + + isEmpty error + + + + + + + + keySet error + + + + + + + + entrySet error + + + + + +