我正在尝试为资产发布者(文档和媒体类型)使用一些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类的公共方法(和扩展类),对吗?
我想念什么?
最佳答案
资产渲染器呈现给定类的资产条目(在您的情况下为JournalArticle
或DLFileEntry
)。资产渲染器本身不是给定类的实例(就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
的用法。