使用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() />
这是错误:
在公共页面上,我们有一个资产发布者列出所有这些网络内容。
单击其中之一时,一切都很好,并且网页内容已正确呈现。
现在,如果我们通过搜索 portlet 搜索此 Web 内容,它也会正确呈现。
问题是:如果我们决定在使用资产发布者之前搜索网页内容,则 freemarker 引擎无法处理该模板。
事实上我们遇到了this这种错误。
最好的部分是,在您通过搜索得到错误后,您仍然无法通过资产发布者显示它。在这种情况下,一切最终都被打破了。
我真诚地认为我们尝试了有关 freemarker 引擎的所有解决方案(portal-ext.properties、freemarker 允许/限制类等)。
我不明白为什么如果我们来自任何可以显示这些网页内容的其他页面,它工作正常,但如果我们在 strat 搜索它,则根本不行。
谢谢大家的帮助。
使用模板进行编辑并出现错误
编辑#2:这是切换到 serviceLocator 时的错误:
您不需要
staticUtil
来检索 DLFileEntryLocalServiceUtil
,请尝试使用 serviceLocator
来代替:
<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
注意。
您必须在模板中启用 serviceLocator:
转到
Control Panel -> Configuration -> System Settings -> Foundation -> FreeMarker Engine -> Restricted Variables
并删除 serviceLocator,然后重新启动 Liferay。
您可以通过将其放入 Portal-ext.properties 来禁用 serviceLocator 的限制
template.engine.service.locator.restrict=false