0

需要你的帮助!

我希望标题是描述性的,但这里有详细信息

假设我们有 5 个 Web 应用程序,并且假设它们使用 5 个不同的框架完成。其中之一是使用 playframework。现在,由于重新命名所有五个网站将花费大量时间,我们想到了将一个布局模板托管为 HTML 页面,其中将包含 <% doLayout %> 播放标签。

我们需要使用这种布局的方法,因为它是播放应用程序源代码的一部分。现在我阅读了 API 文档并找到了 VirtualFile 类(VirtualFile API Docs)。由于文档非常简短,我无法从文档中看出此类的目的是什么,但我看到它包含可能对我的案例有用的功能......

下面是同一个类,但在 .NET 中。我之前做过这样的集成,但现在我在 playframework 中也需要它。另请注意,下面链接上的示例是从 zip 存档提供的,但是使用 VirtualPathProviders,您可以从任何地方提供模板 虚拟化对内容的访问

感谢任何帮助,虽然,解决方案不需要包含 VirtualFile,但它必须是即插即用的。

注意:我们使用的是 playframework 1.2.1

谢谢

4

1 回答 1

0

我找到了解决问题的方法,但没有找到虚拟文件类。extend如果我在游戏中创建将替换我视图中的标签的自定义标签,它可以是 dan 。

如果您查看播放源代码,您会发现现有 FastTags 类的工作原理,第 319 行

public static void _extends(Map<?, ?> args, Closure body, PrintWriter out, ExecutableTemplate template, int fromLine) {
    try {
        if (!args.containsKey("arg") || args.get("arg") == null) {
            throw new TemplateExecutionException(template.template, fromLine, "Specify a template name", new TagInternalException("Specify a template name"));
        }
        String name = args.get("arg").toString();
        if (name.startsWith("./")) {
            String ct = BaseTemplate.currentTemplate.get().name;
            if (ct.matches("^/lib/[^/]+/app/views/.*")) {
                ct = ct.substring(ct.indexOf("/", 5));
            }
            ct = ct.substring(0, ct.lastIndexOf("/"));
            name = ct + name.substring(1);
        }
        BaseTemplate.layout.set((BaseTemplate) TemplateLoader.load(name));
    } catch (TemplateNotFoundException e) {
        throw new TemplateNotFoundException(e.getPath(), template.template, fromLine);
    }
}

我只需要使用TemplateLoader.load(String, String)接受模板作为字符串的重载方法(与原始实现中的文件名相比),然后将其设置为 BaseTemplate.layout.set(...)方法。当然,首先我需要通过 HTTP 请求从远程服务器获取模板。

于 2012-08-14T02:00:41.433 回答