我正在尝试为资产发布者(文档和媒体类型)开展一些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类公共方法(和扩展类),对吗?
我想念什么?
答案 0 :(得分:3)
资产渲染器渲染给定类的资产条目(例如,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
。