Lifefay freemarker ADT:方法不可用?

Lifefay freemarker ADT: methods unavailable?

我正在尝试为资产发布者(文档和媒体类型)开发一些 ADT,但我经常收到一条消息告诉我:

Expression assetRenderer.getDataRepositoryId is undefined 

Expression assetRenderer.getFileEntryId is undefined

我发现了一些帖子,其中有人说我们必须添加

velocity.engine.restricted.classes=
velocity.engine.restricted.variables=
freemarker.engine.restricted.classes=
freemarker.engine.restricted.variables=

portal-ext.properties 中获得更多 classes 和变量可用,但我仍然无法调用某些方法,我也不知道为什么。

我做了一个

${assetRenderer.getClassName()}

哪个returns:com.liferay.portlet.documentlibrary.model.DLFileEntry

所以我应该可以使用任何 DLFileEntry class public 方法(和扩展的 classes),对吗?

我错过了什么?

资产渲染器渲染给定 class 的资产条目(在您的情况下为 JournalArticleDLFileEntry)。资产渲染器本身不是给定 class 的实例(在 Java 意义上)。它始终是 com.liferay.portlet.asset.model.AssetRenderer.

的实例

要获取相关 DLFileEntry 的实例,您必须使用 DLFileEntryLocalService 来找到它。

<#-- Obtains instance of DLFileEntryLocalService -->
<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService") />

<#-- Function returning underlying DLFileEntry for the given AssetEntry -->
<#function getDLFileEntry assetEntry>
    <#return DLFileEntryLocalService.getDLFileEntry(assetEntry.getClassPK())/>
</#function>

请注意,您需要通过在 portal-ext.properties 中设置 freemarker.engine.restricted.variables= 来明确启用 serviceLocator 的使用。