我正在尝试为资产发布者(文档和媒体类型)使用一些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中获得更多可用的类和变量,但是我仍然无法调用某些方法,我也不知道为什么。

我做了一个

${assetRenderer.getClassName()}


返回:com.liferay.portlet.documentlibrary.model.DLFileEntry

因此,我应该能够使用任何DLFileEntry类的公共方法(和扩展类),对吗?

我想念什么?

最佳答案

资产渲染器呈现给定类的资产条目(在您的情况下为JournalArticleDLFileEntry)。资产渲染器本身不是给定类的实例(就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>


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

07-24 14:42