需要你的帮助!
我希望标题是描述性的,但这里是详细信息
假设我们有5个Web应用程序,并且可以说它们已经完成了5个不同的框架。其中一个是使用playframework。现在,由于重塑所有五个网站将花费大量时间,我们开始想要将一个布局模板作为HTML页面托管,其中包含<%doLayout%>在其中播放标签。
我们需要使用此布局,因为它是播放应用程序源代码的一部分。现在我阅读API文档并找到VirtualFile类(VirtualFile API Docs)。由于文档非常简短,我不能从文档中说出这个类的目的是什么,但我发现它包含的功能对我的案例很有用......
下面是相同的类,但在.NET中。我之前做过这样的集成,但现在我也需要在playframework中使用它。另请注意,下面的链接示例来自zip存档,但使用VirtualPathProviders,您可以从任何地方提供模板 Virtualizing Access to Content
任何帮助都表示赞赏,因此,解决方案不需要包含VirtualFile,但它必须是即插即用。
注意:我们正在使用playframework 1.2.1
由于
答案 0 :(得分:0)
我找到了解决问题的方法,但没有找到虚拟文件类。如果我在游戏中创建自定义标记,它将取代我的视图中的extend
标记。
如果您查看播放源代码,您可以找到现有的工作原理 FastTags class, line 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请求从远程服务器获取模板。