Liferay,来自搜索的 Freemarker 错误模板,但不是来自其他链接

Posted

技术标签:

【中文标题】Liferay,来自搜索的 Freemarker 错误模板,但不是来自其他链接【英文标题】:Liferay, Freemarker error template from search but not from other link 【发布时间】:2018-09-30 21:07:19 【问题描述】:

使用 liferay 7 GA4 和 freemarker 引擎。

我们在使用 freemarker 引擎时遇到了一个奇怪的行为。

我们有一堆使用相同 .ftl 模板的网页内容。

这是模板的开头:

<#assign journalArticleId = .vars['reserved-article-id'].data>
<#assign journalArticleResourceLocalServiceUtil = 
staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]>
<#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]>
<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/>
<#assign categories = assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) >
<#list categories as category>
<#if category?is_first>
    <#assign categorie = category.getName()>
</#if>
</#list>
<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
<#assign themeDisplay = serviceContext.getThemeDisplay() />

<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />

这是错误:

Error

在一个公共页面上,我们有一个资产发布者列出了所有这些网络内容。

当点击其中一个时,一切都很好,并且网络内容被正确呈现。

现在,如果我们通过搜索 portlet 搜索此 Web 内容,它也会正确呈现。

问题是:如果我们决定在使用资产发布者之前搜索网页内容,freemarker 引擎无法处理模板。

事实上,我们得到了this 类型的错误。

最好的部分是通过搜索得到错误后,您仍然无法通过资产发布者显示它。在那种情况下,一切终于被打破了。

我真诚地认为我们尝试了有关 freemarker 引擎的所有解决方案(portal-ext.properties、freemarker 允许/限制类等)。

我不明白为什么如果我们来自可以显示这些网络内容的任何其他页面,它就可以正常工作,但如果我们在 strat 搜索它就完全不行了。

感谢大家的帮助。

使用模板和错误编辑

编辑#2:这是切换到 serviceLocator 时的错误:

serviceLocatorError

【问题讨论】:

请添加您的代码和文件,以便我们为您提供帮助 【参考方案1】:

您不需要staticUtil 来检索DLFileEntryLocalServiceUtil,请尝试改用serviceLocator

<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>

注意。

您必须在模板中启用 serviceLocator:

转到Control Panel -&gt; Configuration -&gt; System Settings -&gt; Foundation -&gt; FreeMarker Engine -&gt; Restricted Variables 并删除 serviceLocator 然后重新启动 Liferay。

【讨论】:

是的,我们已经尝试切换到 serviceLocator 并且限制变量已被删除。但还是一样。问题是,如果我们不使用搜索 portlet,它就可以正常工作

以上是关于Liferay,来自搜索的 Freemarker 错误模板,但不是来自其他链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 freemarker 构建 Liferay 7 巨型菜单(多级菜单)

如何获得可重复的文本字段 liferay7 Freemarker 之一

Liferay 7 - Freemarker:解包操作与函数签名不匹配

Liferay 7 - 列出模板 FreeMarker 中的所有博客

带有 freemarker 和 spring 的 Liferay portlet

使用 FreeMarker 在 Liferay 主题中显示图像