3

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

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

anyPage.vm

<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不起作用。

标头.vm

<h1>Header</h1>
$AnotherJavaObject.toString()

header.vm包含任何<head><body>标记。

渲染页面时AnotherJavaObject,我看到的是实际的字符串,而不是 的字符串表示$AnotherJavaObject.toString()

任何帮助表示赞赏。谢谢。

4

2 回答 2

3

解决了

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

而不是调用load()带有标头id 的组件,您只需要拥有

#parse("header.vm")

您希望在哪里header.vm呈现。

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

#include("other.html")

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

properties.setProperty(RuntimeConstants.EVENTHANDLER_INCLUDE, IncludeRelativePath.class.getName());
velocityEngine = new org.apache.velocity.app.VelocityEngine(properties);
于 2017-08-22T10:13:59.320 回答
1

模板返回结果后,您无法在 JavaScript 中加载它。你应该使用解析查看速度加载资源

#parse("header.vm")

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

于 2017-08-22T10:10:16.347 回答