This is what I had done in my example I originally specified. As I stated, it 
seems that on startup my XML is used but then when I hit the action, struts 
builds a new instance and ignores my XML specs.

-Tim

dusty wrote:
You can "de-autowire" an action by creating an XML configuration for it. Then you can use the spring name instead of the class in the action config

<bean id="myAction" class="com.actions.MyAction">
    <property name="myManager" ref="userService"/>
</bean>
<bean id="myOtherAction" class="com.actions.MyAction">
    <property name="myManager" ref="otherUserService"/>
</bean>

struts.xml
<action name="something" class="myAction">...</action>

<action name="somethingElse" class="myOtherAction">...</action>

That way you get the benefit of autowiring for your simple stuff and you can
use XML config for your more exotic Spring injections.

Relph,Brian wrote:

Did you try setting the value="none"?

Brian Relph

-----Original Message-----
From: Timothy Orme [mailto:to...@genome.med.harvard.edu] Sent: Friday, January 16, 2009 10:41 AM
To: Struts Users Mailing List
Subject: Re: Incorrect Bean Injected

So scratch that, I figured out that Struts is set to autowire by default
with the spring plugin.

In my struts.xml I have:

<constant name="struts.objectFactory"
value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> <constant
name="struts.objectFactory.spring.autoWire" value="type" />

And am now autowiring by type instead of name. However, does anyone know
how to turn off autowiring altogether?
I've seen a feature request for this, but it hasn't been filled yet. Has
anyone devised a workaround?

Thanks,
Tim Orme

Timothy Orme wrote:
This seems really strange to me, but I don't know the inner workings of struts enough to know if it's expected behavior.

I'm using Struts 2.1.2 and spring 2.5.3

I have a 2 service beans that have the same name, but depending on the action, one might be used instead of the other.


<bean id="hibernateUserService" class="hibernate.service.impl.LoginUserServiceImpl">
</bean>

<bean id="sqlUserService" class="sql.service.impl.LoginUserServiceImpl">
</bean>

<bean id="submitQuoteAction" class="action.quotes.SubmitQuoteAction">
    <property name="userService" ref="hibernateUserService" /> </bean>

<bean id="registerUserAction" class="action.users.RegisterUserAction">
    <property name="userService" ref="sqlUserService"/> </bean>

So I have 2 beans, each serving a similar purpose, so named the same, but used in different actions.

What happens is, at the webapp startup, I see the beans get injected into the actions fine. The types are correct, and the property is set. The server starts without any issues. However, whats strange is that when I try and go to either action I get a null pointer for the userService objects in both actions.

I did notice though, that if I name one of the service beans to just "userService" instead of say, "hibernateUserService" then one of the actions will work correctly, while the other will fail saying that it cant cast sql.service.impl.LoginUserServiceImpl to hibernate.service.impl.LoginUserServiceImpl.

It seems then that Struts is wiring the properties by bean name and overriding the beans that I have specified in my applicationContext.
Does anyone know what would cause this or how to work around it?

Thanks,
Tim Orme

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

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

----------------------------------------------------------------------
CONFIDENTIALITY NOTICE This message and any included attachments are from
Cerner Corporation and are intended only for the addressee. The
information contained in this message is confidential and may constitute
inside or non-public information under international, federal, or state
securities laws. Unauthorized forwarding, printing, copying, distribution,
or use of such information is strictly prohibited and may be unlawful. If
you are not the addressee, please promptly delete this message and notify
the sender of the delivery error by e-mail or you may call Cerner's
corporate offices in Kansas City, Missouri, U.S.A at (+1) (816)221-1024.

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





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

Reply via email to