Liferay Freemarker-如何在内容模板中获取标记

Liferay Freemarker-如何在内容模板中获取标记,liferay,freemarker,Liferay,Freemarker,我有一个具有结构和模板的内容,我想访问内容的标记以在模板中显示它。 在资产发布者的上一个应用程序显示模板中,我得到了带有ServiceLocator的标记,如下所示: <#list entries as entry> <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") /> &

我有一个具有结构和模板的内容,我想访问内容的标记以在模板中显示它。 在资产发布者的上一个应用程序显示模板中,我得到了带有ServiceLocator的标记,如下所示:

<#list entries as entry>
  <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") />
  <#assign assetTagLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetTagLocalService") />
  <#assign assetTags = assetTagLocalService.getEntryTags(entry.getEntryId()) />
  <#list assetTags as tag>
        <#if tag.getName() != "startseite">
             ${tag.getName()}
        </#if>
  </#list>
</#list>

${tag.getName()}
在我的模板中,我用
.vars['reserved-article-id']交换了条目。数据
,但随后出现错误:

方法public final java.util.List com.sun.proxy.$Proxy562.getEntryTags(long)抛出com.liferay.portal.kernel.exception.SystemException在com.liferay.portlet.asset.service.impl上调用时抛出异常。AssetTagLocalServiceImpl@6bc73e2b


如何使其在模板中工作?

标记使用assetEntry的resourcePrimKey与assetEntry关联,因此您可以执行以下操作:

<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") />
<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService") />

<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(scopeGroupId), .vars['reserved-article-id'].data)>
<#assign asset = assetEntryLocalService.getEntry('com.liferay.portlet.journal.model.JournalArticle', article.resourcePrimKey) >

<#list asset.getTags() as tag>
    <code>${tag.name}</code>
</#list>

从Liferay 7开始,您应该能够使用以下各项:

<#list entries as entry>
    <#assign
        entry = entry
    />

    <#list entry.tagNames as tag>
        ${tag}
    </#list>
</#list>

${tag}