适用于多客户端webapp的TemplateLoader

时间:2014-05-02 11:18:01

标签: java templates struts2 freemarker

我使用Freemarker模板为多个客户提供Struts2 webapp。所有模板都可以在webapp的ClassPath中找到,但每个模板也可以在文件系统上覆盖每个客户。 用于客户的模板(在文件系统上)取决于主机名。也就是说,主机名和模板目录之间存在映射。

e.g.
a.somehost.com points to /appl/templates/a/
b.somehost.com points to /appl/templates/b/

目前,我们通过使用自定义FreemarkerManager并覆盖

来实现此行为
public synchronized Configuration getConfiguration(ServletContext servletContext)

方法,以便返回每个主机名的配置。 每个配置包含客户模板目录的TemplateLoader。

自Struts-version 2.3.16起,FreemarkerManager中就有这个themeTemplateLoader成员变量,它作为配置中使用的一个templateLoader。

private FreemarkerThemeTemplateLoader themeTemplateLoader;

你看到了我的困境。我需要几个独立的templateLoader,每个客户一个。

很明显,我无法继续为应用程序永久实现多客户端功能。

我还考虑编写自己的TemplateLoader并使用那个神奇的TemplateLoader返回一个配置,但是模板缓存中的所有这些都会再次中断。

我的问题是:为每个客户使用不同模板实现多客户端功能的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您必须使用单独的Configurations,否则您必须为每个域使用不同的模板名称。