【问题标题】:Lifefay freemarker ADT: methods unavailable?Lifefay freemarker ADT:方法不可用?
【发布时间】:2015-09-04 03:14:27
【问题描述】:

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

我错过了什么?

【问题讨论】:

    标签: java liferay liferay-6 freemarker


    【解决方案1】:

    资产渲染器渲染给定类的资产条目(在您的情况下为 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>
    

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

    【讨论】:

      猜你喜欢
      • 2017-04-14
      • 2017-05-23
      • 2013-12-17
      • 2015-08-10
      • 2012-03-18
      • 2012-05-16
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多