Hi,

I'm using Struts 2.2.3 and have observed some bizarre behavior when using Spring to provide my actions.. In order to simplify this and prove the problem I have created a project with a single static html file, and a single action in struts.xml which references a bean in my spring context file.

What basically happens is that if I declare a bean in my spring context (bean unrelated toany struts action) that is of class java.lang.String (as I do for a log4j filepath) then when I perform a redirect in an action mapping this gets appended to the end of the url as the anchor.

If I navigate to http://localhost:8080/My App/simpleRedirect
the result is a reirect to the 'simple' action but note the url struts has redirected to:
http://localhost:8080/MyApp/simple#this%20is%20a%20java.lang.String%20bean%20in%20my%20spring%20context

For some reason the org.apache.struts2.dispatcher.ServletRedirectResult class is being instantiated by with the anchor and location constructor args set to the value of my spring bean by the StrutsSpringObjectFactory

If I remove the String bean from the spring contect then the url behaves as normal, redirecting to:
http://localhost:8080/MyApp/simple

Have been scratching my head trying to find where this behaviour is happening but have run out of time.. is this a known issue?

Files content:
*Spring context file:*

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
        xmlns:aop="http://www.springframework.org/schema/aop";
    xmlns:tx="http://www.springframework.org/schema/tx";
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                        http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
                        http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd";>

    <!-- Expose String as a bean (usually for a file path)-->
    <!-- Picked up by Struts and set as location and anchor on a redirect and 
presented in url
        If commented out this does not happen -->
    <bean id="someFileName" class="java.lang.String">
        <constructor-arg value="this is a java.lang.String bean in my spring 
context" />
    </bean>

    <!--  action beans -->
    <bean name ="simpleAction" class="uk.co.marcusbond.action.SimpleAction" 
scope="prototype" />
</beans>

*Struts file:*
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd";>
<struts>
    <package name="simple" extends="struts-default">
        <!-- returns success and shows index.html -->
        <action name="simple"
            class="simpleAction">
            <result>index.html</result>
        </action>

        <!-- redirects through the 'simple' action -->
        <action name="simpleRedirect">
                <result name="success" type="redirect">simple</result>
        </action>
    </package>
</struts>

*Java class uk.co.marcusbond.action.SimpleAction*
package uk.co.marcusbond.action;

public class SimpleAction  {

    public String execute() {
        return "success";
    }
}


Reply via email to