我正在使用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
。
感谢任何帮助。感谢。
答案 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来显示/隐藏结果。