Lifefay freemarker ADT:方法不可用?

时间:2015-06-18 13:01:16

标签: java liferay liferay-6 freemarker

我正在尝试为资产发布者(文档和媒体类型)开展一些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类公共方法(和扩展类),对吗?

我想念什么?

1 个答案:

答案 0 :(得分:3)

资产渲染器渲染给定类的资产条目(例如,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