ActionBeanContextは、Stripesアプリケーションコンテキストでもあります。このコンテキストはカスタマイズ可能であり、必要なものを含めることができます。いくつかのサンプルコード:
package my.app;
public class CustomActionBeanContext extends ActionBeanContext {
public CustomActionBeanContext() {
super();
}
public MyObject getMyObject() {
return (MyObject) getServletContext().getAttribute(“myObject”);
}
// Alternative solution without ServletContextListner
private static MyObject2 myObject2;
static {
myObject2 = new MyObject2();
}
public MyObject2 getMyObject2() {
return myObject2;
}
}
StripesコンテキストファクトリにカスタムActionBeanContextを使用することを通知するには、web.xmlのStripesフィルターにinit-paramを追加する必要があります。
<init-param>
<param-name>ActionBeanContext.Class</param-name>
<param-value>my.app.CustomActionBeanContext</param-value>
</init-param>
SerlvetContextListenerを追加することにより、サーバーの起動時にオブジェクトを初期化できます。
Public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
event.getServletContext().setAttribute("myObject", new MyObject());
}
ActionBeanの例:
public class MyAction implements ActionBean {
private CustomActionBeanContext context;
@Override
public CustomActionBeanContext getContext() {
return context;
}
@Override
public void setContext(ActionBeanContext context) {
this.context = (CustomActionBeanContext) context;
}
@DefaultHandler
public Resolution view() {
MyObject myObject = getContext().getMyObject();
// doing something usefull with it..
}
}
私の意見では、別の解決策は、依存性注入フレームワークを使用して(シングルトン)オブジェクトをアクションBeanに注入することです。こちらのStripes構成例を参照してください:GuiceDIを使用したStripesActionBeansの注入