2013-07-19 37 views
3

當我使用Struts 2.1.8,我用freemarker的是這樣的:Struts2.3.15 freemarker的整合

配置applicationContext.xml中的Bean:

<bean id="freemarkerManager" 
     class="org.apache.struts2.views.freemarker.FreemarkerManager"/> 
代碼

try { 
    ServletContext servletContext = ServletActionContext.getServletContext(); 
    System.out.println(freemarkerManager.getConfig()); 
    Configuration configuration = 
           freemarkerManager.getConfiguration(servletContext); 
    Template template = configuration.getTemplate(templateFilePath); 
    File htmlFile = new File(servletContext.getRealPath(htmlFilePath)); 
    File htmlDirectory = htmlFile.getParentFile(); 
    if (!htmlDirectory.exists()) { 
     htmlDirectory.mkdirs(); 
    } 
    Writer out = new BufferedWriter(new OutputStreamWriter(
             new FileOutputStream(htmlFile), "UTF-8")); 
    template.process(data, out); 
    out.flush(); 
    out.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

它在Struts 2.1.8中運行良好;

但現在我使用Struts 2.3.15,它不工作;它無法加載freemarker.properties。我讀的源代碼,問題是fileManager爲null在loadSettings()方法:

try { 
    in = fileManager.loadFile(
       ClassLoaderUtil.getResource("freemarker.properties", getClass())); 
在Struts中

2.1.8 loadSettings()方法是這樣的:

InputStream in = null; 
try { 
    in = FileManager.loadFile("freemarker.properties", FreemarkerManager.class); 

它有沒有問題

有誰能告訴我如何在Struts 2.3.15上使用freemarkerManager

+0

你真的需要從'freemarkerManager' FreeMarker的配置,或者它是好的,如果你會爲它創建新的配置? –

+0

Aleksandr M,你是對的,它不是必須從freemarkerManager獲取配置,爲什麼我使用它,首先,因爲Struts2.1.8工作正常,我想找到爲什麼Struts22.3.15不能工作;第二,我有一個freemarker.properties,我不想自己設置屬性,所以我想讓FreemarkerManager做到這一點。 –

+0

我擴展了FreemarkerManager並像下面這樣覆蓋了loadSettings方法:public class CustomFreemarkerManager extends FreemarkerManager { \t \t private static final Logger LOG = LoggerFactory.getLogger(CustomFreemarkerManager.class); \t @Override \t protected void loadSettings(ServletContext servletContext){ InputStream in = null; 嘗試{ \t //獲取Freemarker的配置文件 \t資源資源=新使用ClassPathResource( 「freemarker.properties」); \t in = resource.getInputStream(); –

回答

0

必須初始化freemarkerManager這樣的:

FreemarkerManager freemarkerManager = Dispatcher.getInstance().getContainer().getInstance(FreemarkerManager.class);