I've seen a few responses, but I think the best way would be to write
an interceptor that places the bean into the session. Give it a known
name in the session, then you can use OGNL to access it... Here is a
quick example of the interceptor -
public class CustomInterceptor extends AbstractInterceptor {
private SomeBeanGeneratingService someBeanGeneratingService;
public String intercept(ActionInvocation invocation) throws Exception {
invocation.getSession().put("knownBeanName",
someBeanGeneratingService.getBean());
return invocation.invoke();
}
public void setSomeBeanGeneratingService(SomeBeanGeneratingService
someBeanGeneratingService) {
this.someBeanGeneratingService = someBeanGeneratingService;
}
}
The benefit is using an interceptor is two-fold... One is that it's
pretty easy to unit test (compared to a Servlet Filter). Two is that
it can be spring-configured and spring-injected.
With this interceptor putting the bean into the session, you can
access the bean's values through OGNL. Here is an example s:property
tag retrieving some property -
<s:property value="%{#session.knownBeanName.someProperty}" />
Then, configure the interceptor and dependencies and put this
interceptor in your stack.
-Wes
On Wed, May 12, 2010 at 4:57 AM, Andy Law <[email protected]> wrote:
>
> All,
>
> Apologies if this would be better asked in a Spring forum. If so, I would
> appreciate guidance as to which one/where.
>
> I have a Struts2 application with around 30 actions. Most inherit from a
> common base class. We have configured the system to start to use Spring to
> inject certain things into certain places. This seems to work well and we
> are all currently happy bunnies.
>
> A new requirement means that we need to have available across pretty much
> every action a separate, independent bean that carries information that may
> (or may not) need to be displayed on the resulting web-pages. I am wondering
> what the best way is to make this bean available to each JSP.
>
> I'm happy with injecting certain beans into certain actions, but I'm not
> clear what I should be injecting *this* bean into. Ideally it should just
> pop into existence and be available to the JSPs without the Actions even
> being aware that it is there. It's not part of the business logic and is
> purely informational. If I have to make it available through the Actions
> then I would *like* to be able to inject it into the common base class with
> a single configuration and have that work automatically for all sub-classes
> (and this would be a useful trick for some other places in the application)
> but that does not seem to be possible unless I'm missing a trick?
>
> How should I configure this, please?
>
> Later,
>
> Andy
> --
> View this message in context:
> http://old.nabble.com/Some-Spring-Struts-questions-tp28533505p28533505.html
> Sent from the Struts - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>
--
Wes Wannemacher
Head Engineer, WanTii, Inc.
Need Training? Struts, Spring, Maven, Tomcat...
Ask me for a quote!
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]