Получение текста шаблона из FreeMarker в приложении Struts2 - PullRequest
0 голосов
/ 21 октября 2010

Я хотел бы создать электронную почту внутри приложения Struts2, используя Freemarker.Поскольку я также использую Freemarker для своего представления, я хотел бы «повторно использовать» ту же конфигурацию.

Уже существует аналогичный вопрос для того же действия с Spring. Получение текста шаблона из приложения FreeMarker в Spring

Я не уверен, с чего начать.

Я смотрю код org.apache.struts2.components.template.FreemarkerTemplateEngine .Должен ли я повторить это?или просто назвать это?Мне неясно, как вернуть отредактированный текст.

1 Ответ

2 голосов
/ 09 ноября 2010

Нечто подобное должно делать,

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;
    }
}
...