freemarker - 将 FreeMarker 与 Apache Sling 结合使用

标签 freemarker scriptengine sling aem

我使用的是内容存储库 (Adobe CQ5),其下有 Apache Sling。我想使用 FreeMarker 而不是 JSP 呈现网页。

为此,我应该将 OSGi Freemarker 扩展上传到 Sling(可在 Sling 源代码的贡献部分找到),还是应该上传 OSGi 版本的 Freemarker?这两个 jar 都实现了 javax.script.ScriptEngineFactory 接口(interface),所以我不知道该使用哪一个,也不知道要同时上传这两个。

最佳答案

我通过执行以下操作设法让 Freemarker 在 CQ5.3 上工作:

  1. 从 svn checkout http://svn.apache.org/repos/asf/sling/trunk 获取源代码吊带
  2. 转到 contrib/scripting/freemarker 并从 FreemarkerScriptEngine.java 中删除所有日志记录和 slf4j 引用 - 由于 NoClassDefFoundException 抛出 500 错误 - 我认为 CQ5 与 Freemarker 中包含的 slf4j 版本之间存在冲突(我没有挖掘找出问题所在)
  3. 构建并安装它,它应该出现在 bundle 下的 Sling 控制台和“脚本引擎”页面中,现在让您可以使用 .ftl 脚本。

我通过在 CQ5 中创建 bundle 、导入代码并将常用的 freemarker.jar 添加到 bundle 中来实现略有不同,但这应该也有效,因为它基本上是同一件事。

我遇到的问题是脚本引擎确实被列出但日志记录阻止它运行,这就是为什么您需要从引擎中删除日志和 slf4j。

关于freemarker - 将 FreeMarker 与 Apache Sling 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309615/

相关文章:

aem - CQ-检查资源对象是否有效

java - Freemarker - <#if ??> 似乎无法识别空对象

java - 无法使用 javascript 从 Java 中解析完整的 javascript if 语句

aem - 如何从 AEM 中的 Sling POST 生成渲染输出?

c# - C#解析执行JS

java - 使用Java ScriptEngine同步执行多个评估

aem - 从 CQ5 中的 jcr 节点获取 html 输出

javascript - 如何在 freeMarker 属性内的正则表达式中添加引号

java - Freemarker + Spring MVC 教程

regex - 自由标记替换