[ https://issues.apache.org/jira/browse/WW-4259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Yorozuya Kazuyuki updated WW-4259: ---------------------------------- Environment: Struts: 2.3.16 JRE: 7.0 Tomcat: 7.0 was: OS: Fedora 19(VM) Struts: 2.3.16 JRE: 7.0 Tomcat: 7.0 Eclipse: 4.3.2 > 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: Struts: 2.3.16 > JRE: 7.0 > Tomcat: 7.0 > Reporter: Yorozuya Kazuyuki > Fix For: 2.3.17 > > > h3. Phenomenon > 1. Submitting form with parameters using URL contains querystring consisted of some fields. > {noformat} > > {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;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&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 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/> > > {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)