You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Hernán <he...@gmail.com> on 2012/07/11 16:12:21 UTC

Struts2 RedirectAction Situation

Some days ago I wrote about a problem I had with struts2. As nobody knew
the answer, I solved it but then I forgot to comment about it. So I'll do
it now.
I upgraded a Struts2, Spring, Hibernate Application to the latest version
of struts2 2.3.4, that's way I also upgraded it's corresponding Spring,
Spring security and Tiles dependencies. The web app had spring 2.5.6,
Spring security 2.0 and Tiles 2.0.6. Now it uses spring 3.0.7.RELEASE,
Spring Security 3.1 and Tiles 2.2.2.

The problem I had was with RedirectAction Result, in a nutshell: whenever
struts2 redirected an action, it added !Something#Something at the end of
the correct action I wanted to redirect. As you should know these are the
method and anchor parameters of RedirectAction result... The thing is that
this "Something" comes from Spring Security 3.1 (the same happened with
Spring Security 3.0 as I tried it)

    <beans:bean id="successLogoutUrl" class="java.lang.String">
        <beans:constructor-arg value="Something" />
    </beans:bean>

    <beans:bean id="logoutFilter"
class="org.springframework.security.web.authentication.logout.LogoutFilter">
        <beans:constructor-arg ref="successLogoutUrl" />
        <beans:constructor-arg>
            <beans:list>
                <beans:ref bean="rememberMeServices" />
                <beans:ref bean="securityContextLogoutHandler" />
            </beans:list>
        </beans:constructor-arg>
        <beans:property name="filterProcessesUrl"
value="/logout/j_spring_security_logout"/>
    </beans:bean>


For an unknown reason (at least for me). The Struts2 class
ServletActionRedirectResult used this constructor and...

    public ServletActionRedirectResult(String namespace, String actionName,
String method, String anchor) {
        super(null, anchor);
        this.namespace = namespace;
        this.actionName = actionName;
        this.method = method;
    }

the values passed in each parameter where the String "Something" then there
was no way to avoid method and anchor parameters of being added to the
redirected action, that's why I made a patch and solve the problem.
What I did is something childish but efficient, I passed "null" String
value to parameters anchor and method and in the code, if the parameters
were the String "null" I set the parameters to null. I know it's a little
bit weird but it worked for me... Maybe I am doing something wrong. Dunno.
Anyway bear it in mind, maybe I'm wrong, maybe it's a bug. I don't know.

Here goes my Patch Adams Code Snippets:

struts.xml

        <action name="ChangeLocaleTo*Action"
class="changeLocaleTo{1}Action" >
            <interceptor-ref name="i18nStack" />

            <result name="success" type="redirectAction">
                <param name="actionName">${redirectToAction}</param>
                <param name="namespace">${redirectToNamespace}</param>
                <param name="method">null</param>
                <param name="anchor">null</param>
            </result>
        </action>

org.apache.struts2.dispatcher.ServletActionRedirectResult.java

    public void execute(ActionInvocation invocation) throws Exception {
        actionName = conditionalParse(actionName, invocation);
        if (namespace == null) {
            namespace = invocation.getProxy().getNamespace();
        } else {
            namespace = conditionalParse(namespace, invocation);
        }
        if (method == null || method.equalsIgnoreCase("null")) {
            method = "";
        } else {
            method = conditionalParse(method, invocation);
        }

        String tmpLocation = actionMapper.getUriFromActionMapping(new
ActionMapping(actionName, namespace, method, null));

        setLocation(tmpLocation);

        super.execute(invocation);
    }

org.apache.struts2.dispatcher.ServletRedirectResult.java

    public void execute(ActionInvocation invocation) throws Exception {
        if (anchor != null && !anchor.equalsIgnoreCase("null") &&
!anchor.equalsIgnoreCase("")) {
            anchor = conditionalParse(anchor, invocation);
        }
        super.execute(invocation);
    }


Greetings, any comment will be appreciated.

-- 
Hernán

Re: Struts2 RedirectAction Situation

Posted by Hernán <he...@gmail.com>.
Ok Lukasz, understood. Thank you.

On Wed, Jul 18, 2012 at 5:15 AM, Łukasz Lenart <lukasz.lenart@googlemail.com
> wrote:

> 2012/7/17 Hernán <he...@gmail.com>:
> > It seems that using a String bean and using
> > struts.objectFactory.spring.autoWire=auto in struts.properties
> > wires the String to every parameter of ServletActionRedirectResult by
> > constructor. Is this a struts2 bug?
>
> It's rather a user's bug ;-)
>
>
> http://struts.apache.org/2.x/docs/spring-plugin.html#SpringPlugin-InitializingActionsfromSpring
>
>
> Kind regards
> --
> Łukasz
> mobile +48 606 323 122 http://www.lenart.org.pl/
> Warszawa JUG conference - Confitura http://confitura.pl/
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
>


-- 
Hernán

Re: Struts2 RedirectAction Situation

Posted by Łukasz Lenart <lu...@googlemail.com>.
2012/7/17 Hernán <he...@gmail.com>:
> It seems that using a String bean and using
> struts.objectFactory.spring.autoWire=auto in struts.properties
> wires the String to every parameter of ServletActionRedirectResult by
> constructor. Is this a struts2 bug?

It's rather a user's bug ;-)

http://struts.apache.org/2.x/docs/spring-plugin.html#SpringPlugin-InitializingActionsfromSpring


Kind regards
-- 
Łukasz
mobile +48 606 323 122 http://www.lenart.org.pl/
Warszawa JUG conference - Confitura http://confitura.pl/

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Re: Struts2 RedirectAction Situation

Posted by Hernán <he...@gmail.com>.
Thank you Joseph for your reply, you are right, replacing the String Spring
bean solves the problem (as you can see in the following snippet)

    <!--
    <beans:bean id="successLogoutUrl" class="java.lang.String">
        <beans:constructor-arg value="/" />
    </beans:bean>
    -->
    <beans:bean id="logoutFilter"
class="org.springframework.security.web.authentication.logout.LogoutFilter">
        <beans:constructor-arg value="/">

        </beans:constructor-arg>
        <beans:constructor-arg>
            <beans:list>
                <beans:ref bean="rememberMeServices" />
                <beans:ref bean="securityContextLogoutHandler" />
            </beans:list>
        </beans:constructor-arg>
        <beans:property name="filterProcessesUrl"
value="/logout/j_spring_security_logout"/>
    </beans:bean>

It seems that using a String bean and using
struts.objectFactory.spring.autoWire=auto in struts.properties
wires the String to every parameter of ServletActionRedirectResult by
constructor. Is this a struts2 bug?

Thank you.

Martin, thank you for your reply as well. However, I don't understand what
you are saying.

On Fri, Jul 13, 2012 at 5:50 PM, Martin Gainty <mg...@hotmail.com> wrote:

>
> Necesita cambiar a Header con el nombre 'Location' a nuevo URL
> URL page = new URL(hostUrl);
>
>         HttpURLConnection.setFollowRedirects(true);
>         HttpURLConnection urlc = (HttpURLConnection) page.openConnection();
> String token = urlc.getHeaderField("Location");
>
> Martin Gainty
> ______________________________________________
> Jogi és Bizalmassági kinyilatkoztatás/Verzicht und
> Vertraulichkeitanmerkung/Note de déni et de confidentialité
>  Ez az
> üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, hogy
> jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának
> készítése nem megengedett.  Ez az üzenet csak ismeret cserét szolgál és
> semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus üzenetek
> könnyen megváltoztathatóak, ezért minket semmi felelöség nem terhelhet
> ezen üzenet tartalma miatt.
>
> Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene
> Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte
> Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht
> dient lediglich dem Austausch von Informationen und entfaltet keine
> rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von
> E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
> Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le
> destinataire prévu, nous te demandons avec bonté que pour satisfaire
> informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie
> de ceci est interdite. Ce message sert à l'information seulement et n'aura
> pas n'importe quel effet légalement obligatoire. Étant donné que les email
> peuvent facilement être sujets à la manipulation, nous ne pouvons accepter
> aucune responsabilité pour le contenu fourni.
>
>
> From: jmocker@velti.com
> To: user@struts.apache.org
> Subject: Re: Struts2 RedirectAction Situation
> Date: Fri, 13 Jul 2012 17:58:45 +0000
>
>
>
>
>
>
> Hi Hernán,
>
>
>
> I encountered the same problem as what you are describing. I just figured
> out the cause for me, which appears to be a String bean I have instantiated
> in my Spring applicationContext.xml
>
>
>
>
>     <bean id="myBeanName" class="java.lang.String">
>
> <constructor-arg type="java.lang.String" value="enabled"/>
>     </bean>
>
>
>
>
> From trudging around debug logs it appears Spring is autowiring this
> by-type as this bean name is clearly not referenced in
> ServletActionRedirectResult. Perhaps
>  something similar is happening for you.
>
>
>
>   --joe
>
>
>
>
>
>
>
>
>
>
> Joseph
> Mocker  |  Senior Software Architect
>
>
> t +1.650.566.7033   m +1.408.676.6625
>
> e jmocker@velti.com   @Mobclix
>
>
>
> The leading global technology provider of
>
> mobile marketing and advertising solutions
>
>
>
>
>
>
>
>
>
> On Jul 11, 2012, at 7:12 AM, Hernán wrote:
>
>
> Some days ago I wrote about a problem I had with struts2. As nobody knew
>
> the answer, I solved it but then I forgot to comment about it. So I'll do
>
> it now.
>
> I upgraded a Struts2, Spring, Hibernate Application to the latest version
>
> of struts2 2.3.4, that's way I also upgraded it's corresponding Spring,
>
> Spring security and Tiles dependencies. The web app had spring 2.5.6,
>
> Spring security 2.0 and Tiles 2.0.6. Now it uses spring 3.0.7.RELEASE,
>
> Spring Security 3.1 and Tiles 2.2.2.
>
>
>
> The problem I had was with RedirectAction Result, in a nutshell: whenever
>
> struts2 redirected an action, it added !Something#Something at the end of
>
> the correct action I wanted to redirect. As you should know these are the
>
> method and anchor parameters of RedirectAction result... The thing is that
>
> this "Something" comes from Spring Security 3.1 (the same happened with
>
> Spring Security 3.0 as I tried it)
>
>
>
>    <beans:bean id="successLogoutUrl" class="java.lang.String">
>
>        <beans:constructor-arg value="Something" />
>
>    </beans:bean>
>
>
>
>    <beans:bean id="logoutFilter"
>
>
> class="org.springframework.security.web.authentication.logout.LogoutFilter">
>
>        <beans:constructor-arg ref="successLogoutUrl" />
>
>        <beans:constructor-arg>
>
>            <beans:list>
>
>                <beans:ref bean="rememberMeServices" />
>
>                <beans:ref bean="securityContextLogoutHandler" />
>
>            </beans:list>
>
>        </beans:constructor-arg>
>
>        <beans:property name="filterProcessesUrl"
>
> value="/logout/j_spring_security_logout"/>
>
>    </beans:bean>
>
>
>
>
>
> For an unknown reason (at least for me). The Struts2 class
>
> ServletActionRedirectResult used this constructor and...
>
>
>
>    public ServletActionRedirectResult(String namespace, String actionName,
>
> String method, String anchor) {
>
>        super(null, anchor);
>
>        this.namespace = namespace;
>
>        this.actionName = actionName;
>
>        this.method = method;
>
>    }
>
>
>
> the values passed in each parameter where the String "Something" then there
>
> was no way to avoid method and anchor parameters of being added to the
>
> redirected action, that's why I made a patch and solve the problem.
>
> What I did is something childish but efficient, I passed "null" String
>
> value to parameters anchor and method and in the code, if the parameters
>
> were the String "null" I set the parameters to null. I know it's a little
>
> bit weird but it worked for me... Maybe I am doing something wrong. Dunno.
>
> Anyway bear it in mind, maybe I'm wrong, maybe it's a bug. I don't know.
>
>
>
> Here goes my Patch Adams Code Snippets:
>
>
>
> struts.xml
>
>
>
>        <action name="ChangeLocaleTo*Action"
>
> class="changeLocaleTo{1}Action" >
>
>            <interceptor-ref name="i18nStack" />
>
>
>
>            <result name="success" type="redirectAction">
>
>                <param name="actionName">${redirectToAction}</param>
>
>                <param name="namespace">${redirectToNamespace}</param>
>
>                <param name="method">null</param>
>
>                <param name="anchor">null</param>
>
>            </result>
>
>        </action>
>
>
>
> org.apache.struts2.dispatcher.ServletActionRedirectResult.java
>
>
>
>    public void execute(ActionInvocation invocation) throws Exception {
>
>        actionName = conditionalParse(actionName, invocation);
>
>        if (namespace == null) {
>
>            namespace = invocation.getProxy().getNamespace();
>
>        } else {
>
>            namespace = conditionalParse(namespace, invocation);
>
>        }
>
>        if (method == null || method.equalsIgnoreCase("null")) {
>
>            method = "";
>
>        } else {
>
>            method = conditionalParse(method, invocation);
>
>        }
>
>
>
>        String tmpLocation = actionMapper.getUriFromActionMapping(new
>
> ActionMapping(actionName, namespace, method, null));
>
>
>
>        setLocation(tmpLocation);
>
>
>
>        super.execute(invocation);
>
>    }
>
>
>
> org.apache.struts2.dispatcher.ServletRedirectResult.java
>
>
>
>    public void execute(ActionInvocation invocation) throws Exception {
>
>        if (anchor != null && !anchor.equalsIgnoreCase("null") &&
>
> !anchor.equalsIgnoreCase("")) {
>
>            anchor = conditionalParse(anchor, invocation);
>
>        }
>
>        super.execute(invocation);
>
>    }
>
>
>
>
>
> Greetings, any comment will be appreciated.
>
>
>
> --
>
> Hernán
>
>
>
>
>
>
>



-- 
Hernán

RE: Struts2 RedirectAction Situation

Posted by Martin Gainty <mg...@hotmail.com>.
Necesita cambiar a Header con el nombre 'Location' a nuevo URL
URL page = new URL(hostUrl);
 
        HttpURLConnection.setFollowRedirects(true);
        HttpURLConnection urlc = (HttpURLConnection) page.openConnection();
String token = urlc.getHeaderField("Location");

Martin Gainty 
______________________________________________ 
Jogi és Bizalmassági kinyilatkoztatás/Verzicht und Vertraulichkeitanmerkung/Note de déni et de confidentialité
 Ez az
üzenet bizalmas.  Ha nem ön az akinek szánva volt, akkor kérjük, hogy
jelentse azt nekünk vissza. Semmiféle továbbítása vagy másolatának
készítése nem megengedett.  Ez az üzenet csak ismeret cserét szolgál és
semmiféle jogi alkalmazhatósága sincs.  Mivel az electronikus üzenetek
könnyen megváltoztathatóak, ezért minket semmi felelöség nem terhelhet
ezen üzenet tartalma miatt.

Diese Nachricht ist vertraulich. Sollten Sie nicht der vorgesehene Empfaenger sein, so bitten wir hoeflich um eine Mitteilung. Jede unbefugte Weiterleitung oder Fertigung einer Kopie ist unzulaessig. Diese Nachricht dient lediglich dem Austausch von Informationen und entfaltet keine rechtliche Bindungswirkung. Aufgrund der leichten Manipulierbarkeit von E-Mails koennen wir keine Haftung fuer den Inhalt uebernehmen.
Ce message est confidentiel et peut être privilégié. Si vous n'êtes pas le destinataire prévu, nous te demandons avec bonté que pour satisfaire informez l'expéditeur. N'importe quelle diffusion non autorisée ou la copie de ceci est interdite. Ce message sert à l'information seulement et n'aura pas n'importe quel effet légalement obligatoire. Étant donné que les email peuvent facilement être sujets à la manipulation, nous ne pouvons accepter aucune responsabilité pour le contenu fourni.


From: jmocker@velti.com
To: user@struts.apache.org
Subject: Re: Struts2 RedirectAction Situation
Date: Fri, 13 Jul 2012 17:58:45 +0000






Hi Hernán,



I encountered the same problem as what you are describing. I just figured out the cause for me, which appears to be a String bean I have instantiated in my Spring applicationContext.xml




    <bean id="myBeanName" class="java.lang.String">
    
<constructor-arg type="java.lang.String" value="enabled"/>
    </bean>




>From trudging around debug logs it appears Spring is autowiring this by-type as this bean name is clearly not referenced in ServletActionRedirectResult. Perhaps
 something similar is happening for you.



  --joe










Joseph
Mocker  |  Senior Software Architect


t +1.650.566.7033   m +1.408.676.6625

e jmocker@velti.com   @Mobclix



The leading global technology provider of

mobile marketing and advertising solutions









On Jul 11, 2012, at 7:12 AM, Hernán wrote:


Some days ago I wrote about a problem I had with struts2. As nobody knew

the answer, I solved it but then I forgot to comment about it. So I'll do

it now.

I upgraded a Struts2, Spring, Hibernate Application to the latest version

of struts2 2.3.4, that's way I also upgraded it's corresponding Spring,

Spring security and Tiles dependencies. The web app had spring 2.5.6,

Spring security 2.0 and Tiles 2.0.6. Now it uses spring 3.0.7.RELEASE,

Spring Security 3.1 and Tiles 2.2.2.



The problem I had was with RedirectAction Result, in a nutshell: whenever

struts2 redirected an action, it added !Something#Something at the end of

the correct action I wanted to redirect. As you should know these are the

method and anchor parameters of RedirectAction result... The thing is that

this "Something" comes from Spring Security 3.1 (the same happened with

Spring Security 3.0 as I tried it)



   <beans:bean id="successLogoutUrl" class="java.lang.String">

       <beans:constructor-arg value="Something" />

   </beans:bean>



   <beans:bean id="logoutFilter"

class="org.springframework.security.web.authentication.logout.LogoutFilter">

       <beans:constructor-arg ref="successLogoutUrl" />

       <beans:constructor-arg>

           <beans:list>

               <beans:ref bean="rememberMeServices" />

               <beans:ref bean="securityContextLogoutHandler" />

           </beans:list>

       </beans:constructor-arg>

       <beans:property name="filterProcessesUrl"

value="/logout/j_spring_security_logout"/>

   </beans:bean>





For an unknown reason (at least for me). The Struts2 class

ServletActionRedirectResult used this constructor and...



   public ServletActionRedirectResult(String namespace, String actionName,

String method, String anchor) {

       super(null, anchor);

       this.namespace = namespace;

       this.actionName = actionName;

       this.method = method;

   }



the values passed in each parameter where the String "Something" then there

was no way to avoid method and anchor parameters of being added to the

redirected action, that's why I made a patch and solve the problem.

What I did is something childish but efficient, I passed "null" String

value to parameters anchor and method and in the code, if the parameters

were the String "null" I set the parameters to null. I know it's a little

bit weird but it worked for me... Maybe I am doing something wrong. Dunno.

Anyway bear it in mind, maybe I'm wrong, maybe it's a bug. I don't know.



Here goes my Patch Adams Code Snippets:



struts.xml



       <action name="ChangeLocaleTo*Action"

class="changeLocaleTo{1}Action" >

           <interceptor-ref name="i18nStack" />



           <result name="success" type="redirectAction">

               <param name="actionName">${redirectToAction}</param>

               <param name="namespace">${redirectToNamespace}</param>

               <param name="method">null</param>

               <param name="anchor">null</param>

           </result>

       </action>



org.apache.struts2.dispatcher.ServletActionRedirectResult.java



   public void execute(ActionInvocation invocation) throws Exception {

       actionName = conditionalParse(actionName, invocation);

       if (namespace == null) {

           namespace = invocation.getProxy().getNamespace();

       } else {

           namespace = conditionalParse(namespace, invocation);

       }

       if (method == null || method.equalsIgnoreCase("null")) {

           method = "";

       } else {

           method = conditionalParse(method, invocation);

       }



       String tmpLocation = actionMapper.getUriFromActionMapping(new

ActionMapping(actionName, namespace, method, null));



       setLocation(tmpLocation);



       super.execute(invocation);

   }



org.apache.struts2.dispatcher.ServletRedirectResult.java



   public void execute(ActionInvocation invocation) throws Exception {

       if (anchor != null && !anchor.equalsIgnoreCase("null") &&

!anchor.equalsIgnoreCase("")) {

           anchor = conditionalParse(anchor, invocation);

       }

       super.execute(invocation);

   }





Greetings, any comment will be appreciated.



-- 

Hernán





 		 	   		  

Re: Struts2 RedirectAction Situation

Posted by Joseph Mocker <jm...@velti.com>.
Hi Hernán,

I encountered the same problem as what you are describing. I just figured out the cause for me, which appears to be a String bean I have instantiated in my Spring applicationContext.xml

    <bean id="myBeanName" class="java.lang.String">
    <constructor-arg type="java.lang.String" value="enabled"/>
    </bean>

>From trudging around debug logs it appears Spring is autowiring this by-type as this bean name is clearly not referenced in ServletActionRedirectResult. Perhaps something similar is happening for you.

  --joe


[Velti]<http://www.velti.com>   Joseph Mocker  |  Senior Software Architect
t +1.650.566.7033   m +1.408.676.6625
e jmocker@velti.com   @Mobclix<http://twitter.com/Mobclix>
[cid:sep]
The leading global technology provider of
mobile marketing and advertising solutions


On Jul 11, 2012, at 7:12 AM, Hernán wrote:

Some days ago I wrote about a problem I had with struts2. As nobody knew
the answer, I solved it but then I forgot to comment about it. So I'll do
it now.
I upgraded a Struts2, Spring, Hibernate Application to the latest version
of struts2 2.3.4, that's way I also upgraded it's corresponding Spring,
Spring security and Tiles dependencies. The web app had spring 2.5.6,
Spring security 2.0 and Tiles 2.0.6. Now it uses spring 3.0.7.RELEASE,
Spring Security 3.1 and Tiles 2.2.2.

The problem I had was with RedirectAction Result, in a nutshell: whenever
struts2 redirected an action, it added !Something#Something at the end of
the correct action I wanted to redirect. As you should know these are the
method and anchor parameters of RedirectAction result... The thing is that
this "Something" comes from Spring Security 3.1 (the same happened with
Spring Security 3.0 as I tried it)

   <beans:bean id="successLogoutUrl" class="java.lang.String">
       <beans:constructor-arg value="Something" />
   </beans:bean>

   <beans:bean id="logoutFilter"
class="org.springframework.security.web.authentication.logout.LogoutFilter">
       <beans:constructor-arg ref="successLogoutUrl" />
       <beans:constructor-arg>
           <beans:list>
               <beans:ref bean="rememberMeServices" />
               <beans:ref bean="securityContextLogoutHandler" />
           </beans:list>
       </beans:constructor-arg>
       <beans:property name="filterProcessesUrl"
value="/logout/j_spring_security_logout"/>
   </beans:bean>


For an unknown reason (at least for me). The Struts2 class
ServletActionRedirectResult used this constructor and...

   public ServletActionRedirectResult(String namespace, String actionName,
String method, String anchor) {
       super(null, anchor);
       this.namespace = namespace;
       this.actionName = actionName;
       this.method = method;
   }

the values passed in each parameter where the String "Something" then there
was no way to avoid method and anchor parameters of being added to the
redirected action, that's why I made a patch and solve the problem.
What I did is something childish but efficient, I passed "null" String
value to parameters anchor and method and in the code, if the parameters
were the String "null" I set the parameters to null. I know it's a little
bit weird but it worked for me... Maybe I am doing something wrong. Dunno.
Anyway bear it in mind, maybe I'm wrong, maybe it's a bug. I don't know.

Here goes my Patch Adams Code Snippets:

struts.xml

       <action name="ChangeLocaleTo*Action"
class="changeLocaleTo{1}Action" >
           <interceptor-ref name="i18nStack" />

           <result name="success" type="redirectAction">
               <param name="actionName">${redirectToAction}</param>
               <param name="namespace">${redirectToNamespace}</param>
               <param name="method">null</param>
               <param name="anchor">null</param>
           </result>
       </action>

org.apache.struts2.dispatcher.ServletActionRedirectResult.java

   public void execute(ActionInvocation invocation) throws Exception {
       actionName = conditionalParse(actionName, invocation);
       if (namespace == null) {
           namespace = invocation.getProxy().getNamespace();
       } else {
           namespace = conditionalParse(namespace, invocation);
       }
       if (method == null || method.equalsIgnoreCase("null")) {
           method = "";
       } else {
           method = conditionalParse(method, invocation);
       }

       String tmpLocation = actionMapper.getUriFromActionMapping(new
ActionMapping(actionName, namespace, method, null));

       setLocation(tmpLocation);

       super.execute(invocation);
   }

org.apache.struts2.dispatcher.ServletRedirectResult.java

   public void execute(ActionInvocation invocation) throws Exception {
       if (anchor != null && !anchor.equalsIgnoreCase("null") &&
!anchor.equalsIgnoreCase("")) {
           anchor = conditionalParse(anchor, invocation);
       }
       super.execute(invocation);
   }


Greetings, any comment will be appreciated.

--
Hernán