You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Boris Petrov (Jira)" <ji...@apache.org> on 2022/09/14 09:43:00 UTC
[jira] [Updated] (WW-5224) Struts 6 issue with struts2-jquery-plugin
[ https://issues.apache.org/jira/browse/WW-5224?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Boris Petrov updated WW-5224:
-----------------------------
Description:
I updated my Struts version to 6 and struts2-jquery-plugin to 5 (and
struts2-bootstrap-plugin to 5 but I don't think that's relevant). I'm
having troubles with the `escapeAmp` functionality. The following code:
{noformat}
<div id="div${id}" class="d-inline-block"></div>
<s:url action="forgottenPassword" var="acUrl" escapeAmp="false">
<s:param name="email" value="%{email}"></s:param>
<s:param name="ajax" value="true"></s:param>
</s:url>
<sj:a id="link%{id}" href="%{#acUrl}" targets="div%{id}"
indicator="loader%{id}"
parentTheme="bootstrap" button="false" cssClass="btn btn-sm
btn-outline-primary">
<span id="loader${id}" class="spin-loader"
style="display:none"></span> Reset password
</sj:a>
{noformat}
Worked fine in Struts 2.5.30. Upgrading to Struts 6, I noticed first
that
{noformat}
id="link%{id}"
{noformat}
had stopped working - that string was used
literally as the `id` and wasn't working as expected. I guess that's
expected and something was changed in v6. I'm just mentioning it for you
to say if that's not actually the case.
But the real problem is `escapeAmp` doesn't seem to work any more. In
the generated JavaScript, I see the following -
{noformat}
options_anchor_922437047.hrefparameter =
"email=boris%40example.com&ajax=true";
{noformat}
As you see, there is
`&` instead of `&`. This makes the action on the backend not set the
`ajax` variable correctly. I can't seem to make that work no matter what
I try. If I remove `var="acUrl"`, the resulting URL looks correct with
or without `escapeAmp` which I also find strange.
I'm not sure if I'm doing something wrong or something has changed?
[Here is a reproduction repo|https://github.com/boris-petrov/struts-issue]
Clone the repo, run `./gradlew appStart`, open
`[http://localhost:8080/struts-issue]` (or whatever the address is - it's
printed in the console) and then check the `script` tag - it contains
`foo=1&ajax=true`. If you modify `strutsVersion` in `build.gradle`
to be `2.5.30` and rerun the app and check the script - it will be fine
- `foo=1&ajax=true`.
[Here is a link to the mailing list thread|https://lists.apache.org/thread/ts89px5zctnlzo6nckl898fqh2s0bw26]
However there is not much going on there and so I decided to open an issue.
was:
I updated my Struts version to 6 and struts2-jquery-plugin to 5 (and
struts2-bootstrap-plugin to 5 but I don't think that's relevant). I'm
having troubles with the `escapeAmp` functionality. The following code:
{noformat}
<div id="div${id}" class="d-inline-block"></div>
<s:url action="forgottenPassword" var="acUrl" escapeAmp="false">
<s:param name="email" value="%{email}"></s:param>
<s:param name="ajax" value="true"></s:param>
</s:url>
<sj:a id="link%{id}" href="%{#acUrl}" targets="div%{id}"
indicator="loader%{id}"
parentTheme="bootstrap" button="false" cssClass="btn btn-sm
btn-outline-primary">
<span id="loader${id}" class="spin-loader"
style="display:none"></span> Reset password
</sj:a>
{noformat}
Worked fine in Struts 2.5.30. Upgrading to Struts 6, I noticed first
that
{noformat}
id="link%{id}"
{noformat}
had stopped working - that string was used
literally as the `id` and wasn't working as expected. I guess that's
expected and something was changed in v6. I'm just mentioning it for you
to say if that's not actually the case.
But the real problem is `escapeAmp` doesn't seem to work any more. In
the generated JavaScript, I see the following -
{noformat}
options_anchor_922437047.hrefparameter =
"email=boris%40example.com&ajax=true";
{noformat}
As you see, there is
`&` instead of `&`. This makes the action on the backend not set the
`ajax` variable correctly. I can't seem to make that work no matter what
I try. If I remove `var="acUrl"`, the resulting URL looks correct with
or without `escapeAmp` which I also find strange.
I'm not sure if I'm doing something wrong or something has changed?
[Here is a reproduction repo|https://github.com/boris-petrov/struts-issue]
Clone the repo, run `./gradlew appStart`, open
`http://localhost:8080/struts-issue` (or whatever the address is - it's
printed in the console) and then check the `script` tag - it contains
`foo=1&ajax=true`. If you modify `strutsVersion` in `build.gradle`
to be `2.5.30` and rerun the app and check the script - it will be fine
- `foo=1&ajax=true`.
[Here is a link to the mailing list thread|https://lists.apache.org/thread/ts89px5zctnlzo6nckl898fqh2s0bw26]
However there is not much going on there and so I decided to open an issue.
> Struts 6 issue with struts2-jquery-plugin
> -----------------------------------------
>
> Key: WW-5224
> URL: https://issues.apache.org/jira/browse/WW-5224
> Project: Struts 2
> Issue Type: Bug
> Affects Versions: 6.0.0
> Reporter: Boris Petrov
> Priority: Blocker
>
> I updated my Struts version to 6 and struts2-jquery-plugin to 5 (and
> struts2-bootstrap-plugin to 5 but I don't think that's relevant). I'm
> having troubles with the `escapeAmp` functionality. The following code:
> {noformat}
> <div id="div${id}" class="d-inline-block"></div>
> <s:url action="forgottenPassword" var="acUrl" escapeAmp="false">
> <s:param name="email" value="%{email}"></s:param>
> <s:param name="ajax" value="true"></s:param>
> </s:url>
> <sj:a id="link%{id}" href="%{#acUrl}" targets="div%{id}"
> indicator="loader%{id}"
> parentTheme="bootstrap" button="false" cssClass="btn btn-sm
> btn-outline-primary">
> <span id="loader${id}" class="spin-loader"
> style="display:none"></span> Reset password
> </sj:a>
> {noformat}
> Worked fine in Struts 2.5.30. Upgrading to Struts 6, I noticed first
> that
> {noformat}
> id="link%{id}"
> {noformat}
> had stopped working - that string was used
> literally as the `id` and wasn't working as expected. I guess that's
> expected and something was changed in v6. I'm just mentioning it for you
> to say if that's not actually the case.
> But the real problem is `escapeAmp` doesn't seem to work any more. In
> the generated JavaScript, I see the following -
> {noformat}
> options_anchor_922437047.hrefparameter =
> "email=boris%40example.com&ajax=true";
> {noformat}
> As you see, there is
> `&` instead of `&`. This makes the action on the backend not set the
> `ajax` variable correctly. I can't seem to make that work no matter what
> I try. If I remove `var="acUrl"`, the resulting URL looks correct with
> or without `escapeAmp` which I also find strange.
> I'm not sure if I'm doing something wrong or something has changed?
> [Here is a reproduction repo|https://github.com/boris-petrov/struts-issue]
> Clone the repo, run `./gradlew appStart`, open
> `[http://localhost:8080/struts-issue]` (or whatever the address is - it's
> printed in the console) and then check the `script` tag - it contains
> `foo=1&ajax=true`. If you modify `strutsVersion` in `build.gradle`
> to be `2.5.30` and rerun the app and check the script - it will be fine
> - `foo=1&ajax=true`.
> [Here is a link to the mailing list thread|https://lists.apache.org/thread/ts89px5zctnlzo6nckl898fqh2s0bw26]
> However there is not much going on there and so I decided to open an issue.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)