Liferay 7.4 自定义 Fragment 中的 FreeMarker 为什么没有被解析?
结论
Liferay 7.4 的自定义 Fragment 支持 FreeMarker。代码直接显示时,先检查指令是否使用了 Fragment 所需的方括号语法,以及代码是否写在 Fragment 编辑器的 HTML 区域。官方文档说明,该区域支持使用方括号语法的 FreeMarker。Liferay Fragment 编辑器参考
由于没有提供实际代码,还无法确定具体原因。如果使用了 <#if ...>、<#list ...> 等尖括号指令,可以先尝试下面的修改。
检查 FreeMarker 指令语法
Fragment 中的 FreeMarker 指令应使用方括号,例如:
<#assign ...>改为[#assign ...]。<#if ...>改为[#if ...]。</#if>改为[/#if]。<#list ...>和</#list>改为[#list ...]和[/#list]。
只需调整指令标签。变量插值仍使用 ${...},普通 HTML 标签也保持原样,不要把所有尖括号或插值表达式一并替换。
用最小示例验证解析
在 Fragment 编辑器的 HTML 区域放入以下示例。示例只使用自行定义的变量,便于先确认模板是否正常执行:
[#assign message = "FreeMarker 已执行"]
<div class="fragment-freemarker-check">
[#if message?has_content]
<p>${message}</p>
[/#if]
</div>
正常解析时,页面应显示“FreeMarker 已执行”,而不会显示 [#assign ...] 或 ${message}。这是示例的预期输出,不代表已在当前环境中测试。
保存并发布 Fragment,再将其添加到测试内容页中验证。如果原页面已使用该 Fragment,也要确认页面中的实例已应用更新,且页面已发布;必要时可以添加新实例进行对照。
根据结果继续排查
如果最小示例可以执行,再逐步加入原来的代码。加入某个变量或对象后若出现错误,检查它是否在当前 Fragment 的 FreeMarker 上下文中可用。从其他类型模板复制的代码,也需要重新确认上下文。
如果最小示例仍作为文本显示,检查代码是否写在 HTML 源码区域,以及保存后的内容是否被转义,例如 ${message} 是否变成了 ${message}。同时查看服务端日志,确认是否有相关模板错误。
要进一步定位,需要提供实际的 FreeMarker 片段、Liferay 7.4 的具体更新版本,以及编辑器预览和发布页面各自的表现。现有描述不足以判断是否涉及特定版本的问题。
备注:内容仅供参考。
