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 <[email protected]>
> 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 <[email protected]>
>> 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: [email protected]
For additional commands, e-mail: [email protected]