2010-10-21 61 views
0

我想使用Freemarker在Struts2应用程序中生成电子邮件。 因为我也在使用Freemarker进行视图操作,所以我想“重复使用”相同的配置。在Struts2应用程序中从FreeMarker获取模板文本

对于与Spring做同样的事情,已经有了类似的问题。 Getting template text from FreeMarker in Spring app

我不确定从哪里开始。

我正在查看代码org.apache.struts2.components.template.FreemarkerTemplateEngine。 我应该复制它吗?或者只是打电话给它?我不清楚如何取回呈现的文本。

回答

2

像这样的事情应该做,

import com.opensymphony.xwork2.ActionSupport; 
import freemarker.template.Configuration; 
import freemarker.template.Template; 

import java.io.StringWriter; 

import javax.servlet.ServletContext; 

import org.apache.struts2.util.ServletContextAware; 
import org.apache.struts2.views.freemarker.FreemarkerManager; 

public class DummyAction extends ActionSupport implements ServletContextAware 
{ 
    private static final long serialVersionUID = 1L; 
    private ServletContext context; 

    public String execute() 
    { 
     try 
     { 
      //retrive freemarker config used by struts2 for freemarker results 
      FreemarkerManager manager = new FreemarkerManager(); 
      Configuration cfg = manager.getConfiguration(context); 
      Template template = cfg.getTemplate("your-template"); 

      //your data model 
      Object root = new Object(); 

      //process template 
      StringWriter out = new StringWriter(); 
      template.process(new Object(), out); 

      String renderedText= out.toString(); 

      System.out.println(renderedText); 

     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

     //do work 



     return "success?"; 
    } 

    public void setServletContext(ServletContext context) 
    { 
     this.context = context; 
    } 
}