将Apache Velocity(带SparkJava)与加载的模板一起使用

时间:2017-08-22 09:48:25

标签: jquery html velocity spark-java apache-velocity

我正在使用Spark + Velocity构建一个网站。这个HTML组件在网站的网页上非常相似,所以我将我的共享组件放在一些我动态加载到页面中的模板中。

为了给你一个简单的例子,我有这样的页面:

anyPage.vm

regsave, tstat pval ci

除了<head> stuff in here </head> <body> <div id="header"></div> $AJavaObject.ToString() # <-- using the Velocity templating language ... </body> <script type="text/javascript"> $(function(){ $("#header").load("header.vm"); } </script> 内的Velocity代码无法正常工作之外,这种方法还可以。

header.vm

header.vm

header.vm 不包含任何<h1>Header</h1> $AnotherJavaObject.toString() <head>标记。

渲染页面时,我没有看到<body>的字符串表示,而是看到实际的字符串AnotherJavaObject

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

<强>解决

对于任何面临同样问题的人来说,解决方案都在Velocity Template Engine本身内:http://velocity.apache.org/engine/1.7/user-guide.html#parse

不是使用标头 ID在组件上调用load(),而只需要

#parse("header.vm")

您希望呈现header.vm

您应该使用#include指令加载静态,非Velocity模板,如:

#include("other.html")

然而,这不是那么简单。该文档指出#parse#include只能从 TEMPLATE_ROOT 加载资源。但是,我无法找出根源是什么。因此,在初始化Velocity Engine时,我必须启用它来接受相对路径:

properties.setProperty(RuntimeConstants.EVENTHANDLER_INCLUDE, IncludeRelativePath.class.getName());
velocityEngine = new org.apache.velocity.app.VelocityEngine(properties);

答案 1 :(得分:1)

模板返回结果后,您无法在JavaScript中加载它。你应该使用解析见Velocity Loading resources

#parse("header.vm")

如果你需要隐藏它,请使用JavaScript来显示/隐藏结果。