2017-07-30 20 views
1

要在支柱2工廠類訪問ServletContext(例如StrutsTextProviderFactory的Struts 2:獲取在工廠類ServletContext的

我用下面的代碼:

public class CustomStrutsTextProviderFactory extends 
     StrutsTextProviderFactory implements ServletContextListener{ 


private static String myConfig; 

@Override 
protected TextProvider getTextProvider(Class clazz) { 
    // I can read myConfig here ! 

} 

@Override 
    public void contextInitialized(ServletContextEvent event) { 
     myconfig = event.getServletContext().getInitParameter("config"); 

    } 
} 

它的工作原理,但我覺得定義一個static財產,並以這種方式設置它並不是最好的方法。

有沒有更好的方法?

+0

爲什麼你甚至把它定義爲一個靜態變量?如果我從'myConfig'中刪除靜態,'getTextProvider'方法中的'null'將被刪除。 – home

+0

使它成爲靜態是我發現將此參數傳遞給'getTextProvider'的唯一方式。在servelt開始時調用'contextInitialized',在struts開始時調用'SabaStrutsTextProviderFactory'。每次創建'CustomStrutsTextProviderFactory'的新實例。 –

回答

1

這不是最好的,它是錯誤的,因爲如果你嘗試在struts2配置中使用這樣的工廠,你可能會遇到問題。在初始化struts2之前,servlet上下文是獨立啓動的,因此您不能使用需要啓動框架的struts2 api。

如果您在struts2啓動時需要初始化應用程序,最好的方法就是調度程序初始化事件。請檢查this回答你應該如何實現調度員監聽器。

下面的順序調度初始化事件收聽時構造對象:

15:27:50 INFO (org.apache.struts2.spring.StrutsSpringObjectFactory:42) - ... initialized Struts-Spring integration successfully 
!!! MyBean !!! 
!!! init !!! 
jul 18, 2013 3:27:51 PM org.apache.catalina.startup.HostConfig deployDirectory 
!!! dispatcherInitialized !!! 
+0

我試着'實現DispatcherListener',但1)我找不到'dispatcherInitialized'中的'ServletContext' 2)我的'dispatcherInitialized'永遠不會被調用 –