struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Yorozuya Kazuyuki (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (WW-4259) Parameter is NULL when using URL contains querystring consisted of some fields
Date Tue, 17 Dec 2013 06:42:07 GMT

     [ https://issues.apache.org/jira/browse/WW-4259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Yorozuya Kazuyuki updated WW-4259:
----------------------------------

    Description: 
h3. Phenomenon

1. Submitting form with parameters using URL contains querystring consisted of some fields.

{noformat}
<s:form id="testForm" action="Test.action?field1=%{field1}&field2=%{field2}">
{noformat}

Field1, field2 are member of Test class.
Each setter is implemented in this class.

\\

2. When form tag in struts is interpreted as in HTML, "action" atrribute is this.

{noformat}
action="Test.action?field1=value1&amp;amp;field2=value2"
{noformat}


Due to duplication of "amp;", it causes field2 member to fail to recieve value.
therefore, field2 member equals NULL always.
 
\\

Desired result 2. is this.

{noformat}
action="Test.action?field1=value1&amp;field2=value2"
{noformat}

\\

h3. Cause

Character entity reference about "&" is executed twice.

Executed points are as follow.

--------------------------------------------------------------------------------

・/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java

{noformat}
String buildUrl(
 String action, HttpServletRequest request, HttpServletResponse response, 
 Map<String, Object> params, String scheme, boolean includeContext,
 boolean encodeResult, boolean forceAddSchemeHostAndPort, boolean escapeAmp
)
{noformat}

・/core/src/main/resources/template/simple/form-common.ftl

{noformat}
<#if parameters.action??>
  action="${parameters.action?html}"<#rt/>
</#if>
{noformat}
--------------------------------------------------------------------------------


h3. Solution
"escapeAmp" in method "DefaultUrlHelper.buildUrl" is set "false." 

patch file is this.

{noformat}
--- core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java.orig	2013-12-16
20:39:46.877161793 +0900
+++ core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java	2013-12-16 19:41:56.000000000
+0900
@@ -162,7 +162,7 @@
 
 			ActionMapping mapping = new ActionMapping(actionName, namespace, actionMethod, formComponent.parameters);
 			String result = urlHelper.buildUrl(formComponent.actionMapper.getUriFromActionMapping(mapping),
-                    formComponent.request, formComponent.response, actionParams, null, formComponent.includeContext,
true);
+                    formComponent.request, formComponent.response, actionParams, null, formComponent.includeContext,
true, false, false);
 			formComponent.addParameter("action", result);
 
 			// let's try to get the actual action class and name
{noformat}


  was:
h3. Phenomenon

1. Submitting form with parameters using URL contains querystring consisted of some fields.

{noformat}
<s:form id="testForm" action="Test.action?field1=%{field1}&field2=%{field2}">
{noformat}


2. When URL in struts tag interpreted as HTML, "action" atrribute is this.

{noformat}
action="Test.action?field1=value1&amp;amp;field2=value2"
{noformat}


Due to duplication of "amp;", it causes "field2" to fail to recieve value, 
and "field2" equals NULL always.
 
\\

Desired result is this.

{noformat}
action="Test.action?field1=value1&amp;field2=value2"
{noformat}

\\

h3. Cause

Character entity reference about "&" is executed twice.

Executed points are as follow.

--------------------------------------------------------------------------------

・/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java

{noformat}
String buildUrl(
 String action, HttpServletRequest request, HttpServletResponse response, 
 Map<String, Object> params, String scheme, boolean includeContext,
 boolean encodeResult, boolean forceAddSchemeHostAndPort, boolean escapeAmp
)
{noformat}

・/core/src/main/resources/template/simple/form-common.ftl

{noformat}
<#if parameters.action??>
  action="${parameters.action?html}"<#rt/>
</#if>
{noformat}
--------------------------------------------------------------------------------


h3. Solution
Parameter "escapeAmp" in method "DefaultUrlHelper.buildUrl" is set "false." 

patch file is this.

{noformat}
--- core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java.orig	2013-12-16
20:39:46.877161793 +0900
+++ core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java	2013-12-16 19:41:56.000000000
+0900
@@ -162,7 +162,7 @@
 
 			ActionMapping mapping = new ActionMapping(actionName, namespace, actionMethod, formComponent.parameters);
 			String result = urlHelper.buildUrl(formComponent.actionMapper.getUriFromActionMapping(mapping),
-                    formComponent.request, formComponent.response, actionParams, null, formComponent.includeContext,
true);
+                    formComponent.request, formComponent.response, actionParams, null, formComponent.includeContext,
true, false, false);
 			formComponent.addParameter("action", result);
 
 			// let's try to get the actual action class and name
{noformat}



> Parameter is NULL when using URL contains querystring consisted of some fields
> ------------------------------------------------------------------------------
>
>                 Key: WW-4259
>                 URL: https://issues.apache.org/jira/browse/WW-4259
>             Project: Struts 2
>          Issue Type: Bug
>         Environment: OS: Fedora 19(VM)
> Struts: 2.3.16
> JRE: 7.0
> Tomcat: 7.0
> Eclipse: 4.3.2
>            Reporter: Yorozuya Kazuyuki
>             Fix For: 2.3.17
>
>
> h3. Phenomenon
> 1. Submitting form with parameters using URL contains querystring consisted of some fields.
> {noformat}
> <s:form id="testForm" action="Test.action?field1=%{field1}&field2=%{field2}">
> {noformat}
> Field1, field2 are member of Test class.
> Each setter is implemented in this class.
> \\
> 2. When form tag in struts is interpreted as in HTML, "action" atrribute is this.
> {noformat}
> action="Test.action?field1=value1&amp;amp;field2=value2"
> {noformat}
> Due to duplication of "amp;", it causes field2 member to fail to recieve value.
> therefore, field2 member equals NULL always.
>  
> \\
> Desired result 2. is this.
> {noformat}
> action="Test.action?field1=value1&amp;field2=value2"
> {noformat}
> \\
> h3. Cause
> Character entity reference about "&" is executed twice.
> Executed points are as follow.
> --------------------------------------------------------------------------------
> ・/core/src/main/java/org/apache/struts2/views/util/DefaultUrlHelper.java
> {noformat}
> String buildUrl(
>  String action, HttpServletRequest request, HttpServletResponse response, 
>  Map<String, Object> params, String scheme, boolean includeContext,
>  boolean encodeResult, boolean forceAddSchemeHostAndPort, boolean escapeAmp
> )
> {noformat}
> ・/core/src/main/resources/template/simple/form-common.ftl
> {noformat}
> <#if parameters.action??>
>   action="${parameters.action?html}"<#rt/>
> </#if>
> {noformat}
> --------------------------------------------------------------------------------
> h3. Solution
> "escapeAmp" in method "DefaultUrlHelper.buildUrl" is set "false." 
> patch file is this.
> {noformat}
> --- core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java.orig	2013-12-16
20:39:46.877161793 +0900
> +++ core/src/main/java/org/apache/struts2/components/ServletUrlRenderer.java	2013-12-16
19:41:56.000000000 +0900
> @@ -162,7 +162,7 @@
>  
>  			ActionMapping mapping = new ActionMapping(actionName, namespace, actionMethod, formComponent.parameters);
>  			String result = urlHelper.buildUrl(formComponent.actionMapper.getUriFromActionMapping(mapping),
> -                    formComponent.request, formComponent.response, actionParams, null,
formComponent.includeContext, true);
> +                    formComponent.request, formComponent.response, actionParams, null,
formComponent.includeContext, true, false, false);
>  			formComponent.addParameter("action", result);
>  
>  			// let's try to get the actual action class and name
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Mime
View raw message