He's not using it as a java bean. Spring beans can be immutable.
Is it because when spring wires up your action it considers it to be a parameter as you have get and set methods? So it appends it to the url. If you inject t string bean via constructor injection and not via setter injection and remove the getters and setters ,does that work? On 9 May 2011 16:54, "Chris Pratt" <[email protected]> wrote: > Even if Spring considers it valid, that doesn't mean that other packages > will be able to treat immutable, non-JavaBeans as JavaBeans. > (*Chris*) > > On Mon, May 9, 2011 at 3:39 AM, Marcus <[email protected]> wrote: > >> You can if you want to use a String as a Spring bean, it's a different >> issue as to whether or not it is considered best practice or whether there >> are alternatives. You can find examples on the SpringSource forum if you >> want, commented upon by Springy folk. It is perfectly valid to do so.. >> >> Sorry to sound off here but could input to the topic be constrained to why >> it might be that Struts somehow messes up the redirect by picking this bean >> up even though there are no references to it an any of the struts action >> beans or in the struts.xml.. I think we can infer from this that if any >> context file, regardless of purpose (related to Struts, data access or any >> other whatever) declared a String as a bean this will mess struts redirects >> up.. which is something that shouldn't happen. >> >> >> >> >> On 09/05/2011 11:16, Ilya Kazakevich wrote: >> >>> Not sure you can use primitive wrappers and strings as spring beans. For >>> example autowiring does not work for them. >>> Try the following: >>> >>> 1) inject literal directly >>> Instead of >>> <property ref="myString" >>> Try >>> <property value="myStringContent" >>> >>> 2) Create your own wrapper for string like Configuration class with method >>> getMyProperty >>> >>> >>> Ilya Kazakevich, >>> Developer >>> JetBrains Inc >>> http://www.jetbrains.com >>> "Develop with pleasure!" >>> >>> -----Original Message----- >>> From: Marcus [mailto:[email protected]] >>> Sent: Monday, May 09, 2011 11:27 AM >>> To: [email protected] >>> Subject: Re: Strange behaviour with Spring >>> >>> Not sure what you mean, the bean I'm referring to is a Spring bean not a >>> JavaBean (two unrelated concepts).. there is no requirement when using >>> the Spring framework to not create Spring beans of type String. >>> >>> Regardless, this doesn't help explain why the String is being picked up >>> by the Struts framework and set on the redirect when there is nothing in >>> the configuration to indicate it should.. >>> >>> On 09/05/2011 07:13, Chris Pratt wrote: >>> >>>> You can't create beans that implement java.lang.String, it's immutable >>>> and >>>> doesn't follow the bean spec. >>>> (*Chris*) >>>> >>>> On Sun, May 8, 2011 at 2:11 PM, Marcus Bond<[email protected]> >>>> >>> wrote: >>> >>>> 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%2 >>> 0in%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"; >>>>> } >>>>> } >>>>> >>>>> >>>>> >>>>> >>>> __________ NOD32 6105 (20110508) Information __________ >>>> >>>> This message was checked by NOD32 antivirus system. >>>> http://www.eset.com >>>> >>>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >>> >>> >>> >>> __________ NOD32 6106 (20110509) Information __________ >>> >>> >>> This message was checked by NOD32 antivirus system. >>> http://www.eset.com >>> >>> >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >>

