After a bit more testing it seems all of my executeAndWait implementations
are breaking using the standard recommended refresh implementation [1].
The new <s:url> tag code appends the "method" to the action file name
making the url invalid. So instead of "actionName.action" the result is
"actionName!methodName.action".  I believe this change was introduced in
v6.0.3 for WW-5190 [2] with the addition of
line DefaultActionMapper.java:292 "extractMethodName(mapping,
configManager);"

A real world example is below:

<action name="LetterMergeBulk_contactList"
class="com.afs.web.struts.action.letters.LetterMergeBulkAction"
method="contactList">
    <interceptor-ref name="openSessionExecuteAndWaitInterceptor" />
    <result
name="wait">/struts/letters/letterMergeBulkWait_popup.jsp</result>
    <result>/struts/letters/letterMerge_popup.jsp</result>
</action>

*Results in (v6.0.3)*
/afs/app/LetterMergeBulk_contactList!contactList.action?struts.token.name
=token&token=A9SIKBABK17IZFM6AHSP0QSFIJHLZKJB&letterTemplateId=14773

*Instead of (v6.0.0)*
/afs/app/LetterMergeBulk_contactList.action?struts.token.name
=token&token=A9SIKBABK17IZFM6AHSP0QSFIJHLZKJB&letterTemplateId=14773

*HTML Header*
<head>
   <title>Please wait</title>
   <meta http-equiv="refresh" content="5;url=<s:url includeParams="all"
/>"/>
</head>

[1] https://struts.apache.org/core-developers/execute-and-wait-interceptor
[2] https://github.com/apache/struts/pull/571/commits


On Fri, Oct 7, 2022 at 3:37 PM Burton Rhodes <burtonrho...@gmail.com> wrote:

> After upgrading to Struts 6.0.x, the format of the url returned when using
> includeParams seems to have changed. It now includes "!queue.action" which
> is causing issues in my application. I am using it during an executeAndWait
> call to refresh the page (using refresh logic in my javascript). Is this a
> bug?
>
> *Struts.xml Definifation Action*
> <action name="SendEmail_queue"
> class="com.afs.web.struts.action.email.SendEmailAction" method="queue">
>     <interceptor-ref name="openSessionExecuteAndWaitInterceptor" >
>         <param name="delay">500</param>
>     </interceptor-ref>
>     <result
> name="wait">/struts/common/progressMonitorWait_popup.jsp</result>
>     <result>/struts/email/sendEmailResult_popup.jsp</result>
>     <result name="input">/struts/email/sendEmail_popup.jsp</result>
>     <result name="error">/struts/common/error/error_popup.jsp</result>
>     <result name="login">/struts/common/login/login_popup.jsp</result>
> </action>
>
> *Tag Application*
> *(html)*
> <input type="hidden" id="refreshUrl" value="<s:url includeParams="all"/>"/>
>
> (javascript)
> refreshUrl = new URL(window.location.origin + $('#refreshUrl').val());
>
> *Current Output*
> /afs/app/SendEmail_queue!queue.action?struts.token.name
> =token&token=BJKMBT7FZH6LNTI553HE7ZP1EM6XZEMN&emailQueueId=1234
>
> *Output Prior*
> /afs/app/SendEmail_queue?struts.token.name
> =token&token=BJKMBT7FZH6LNTI553HE7ZP1EM6XZEMN&emailQueueId=1234
>
> Thanks in advance.
>

Reply via email to