struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Burton Rhodes <burtonrho...@gmail.com>
Subject Re: How to put Spring object in Struts application scope on web startup?
Date Sun, 01 Oct 2017 03:16:07 GMT
Nice - I'll take a closer look.  That seems like a decent solution


On Sat, Sep 30, 2017 at 4:22 AM, Yasser Zamani <yasser.zamani@live.com>
wrote:

> Hello Burton,
>
> I tested following and seems works but I did not tested if objects are
> equal by reference (you may get different objects e.g. when scope is
> prototype):
>
> ```java
> public class MYStrutsPrepareFilter implements Filter {
>
>
>         public void doFilter(ServletRequest req, ServletResponse res,
> FilterChain chain)
>                         throws IOException, ServletException {
>
>                 ActionContext actionContext = ActionContext.getContext();
>                 if(null != actionContext) {
>                         ValueStack stack = actionContext.getValueStack();
>                         StrutsSpringObjectFactory objectFactory =
> (StrutsSpringObjectFactory)
> actionContext.getInstance(ObjectFactory.class);
>                         try {
>                                 stack.setValue("#application['
> MYSpringObject']",
> objectFactory.buildBean("myBeanName",null));
>                         } catch (Exception e) {
>                                 e.printStackTrace();
>                         }
>                 }
>                 chain.doFilter(req, res);
>         }
> }
> ```
>
> ```xml
>      <filter>
>          <filter-name>struts2prepare</filter-name>
>          <filter-class>...StrutsPrepareFilter</filter-class>
>      </filter>
>      <filter>
>          <filter-name>MYStrutsPrepareFilter</filter-name>
>          <filter-class>MYStrutsPrepareFilter</filter-class>
>      </filter>
>      <filter>
>          <filter-name>struts2execute</filter-name>
>          <filter-class>...StrutsExecuteFilter</filter-class>
>      </filter>
>      <filter-mapping>
>          <filter-name>struts2prepare</filter-name>
>          <url-pattern>/*</url-pattern>
>      </filter-mapping>
>      <filter-mapping>
>          <filter-name>MYStrutsPrepareFilter</filter-name>
>          <url-pattern>/*</url-pattern>
>      </filter-mapping>
>      <filter-mapping>
>          <filter-name>struts2execute</filter-name>
>          <url-pattern>/*</url-pattern>
>      </filter-mapping>
> ```
>
> ```jsp
> <s:property value="#application.MYSpringObject.myProperty" />
> ```
>
> Hope this helps!
> Yasser.
>
> On 9/30/2017 1:29 AM, Burton Rhodes wrote:
> > I have all of these settings in place, but your comments spurred the idea
> > to have a "BaseAction" class where I autowire my object
> > (MyApplicationSettings.java) and then extend all of my Actions from this
> > class.
> >
> > Just for my info though... My original line of thinking was to be able to
> > access the object with the following:
> >
> > Map application = (Map) ActionContext.getContext().get("application");
> > application.get("myApplicationSettings");
> > ---or---
> > <s:property value="#application.myApplicatoinSettings" />
> >
> > I just couldn't figure out a way to put the object in the struts
> > application scope within a listener during startup.  Does that make
> sense?
> >
> > On Fri, Sep 29, 2017 at 11:50 AM, Adam Brin <abrin@digitalantiquity.org>
> > wrote:
> >
> >> it’s a mixture of things:
> >>
> >> * Struts.xml should be setup to know about spring:
> >>      <constant name="struts.objectFactory"
> >>          value="org.apache.struts2.spring.StrutsSpringObjectFactory" />
> >>      <constant name="struts.objectFactory.
> spring.autoWire.alwaysRespect"
> >> value="true" />
> >>      <constant name="struts.objectFactory.spring.autoWire"
> value="name" />
> >>
> >> * register the appropriate application listeners
> >>
> >> * add the @Scope variables  to controllers
> >>
> >> --
> >> _________________________________________________________
> >> Adam Brin
> >> Director of Technology, Digital Antiquity
> >> 480.965.1278
> >>
> >>> On Sep 29, 2017, at 9:03 AM, Burton Rhodes <burtonrhodes@gmail.com>
> >> wrote:
> >>>
> >>> How do you put a Spring object into the Struts application scope Map on
> >>> startup of a web application?  I have 2 listeners that I thought would
> be
> >>> the usual suspects, but have not had success yet.
> >>>
> >>> I have a ServletContextListener class but on the
> >>> contextInitialized(ServletContextEvent event) method, my spring bean
> has
> >>> not been created yet.
> >>>
> >>> Secondly, I have a Spring "ApplicationListener", but in the
> >>> onApplicationEvent(ApplicationEvent event) method,
> >>> "ServletActionContext.getContext()" is null.  How is this
> traditionally
> >>> accomplished?
> >>>
> >>> Thanks!
> >>> Burton
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message