Liferay 7.2 Asset Publisher ADT如何获取图片选择器的图片URL
解决方案
你遇到的问题是Liferay图片选择器字段存储的内容是序列化的JSON元数据,而非直接的URL,直接输出到src属性就会出现格式错乱。可以通过解析JSON元数据拼接URL解决,以下是两种可直接用的实现方案:
方案1:无需查询文件实体(推荐,无额外权限依赖)
直接从JSON元数据中提取所需字段拼接访问路径:
<#-- 引入JSON解析工具 --> <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactoryUtil") /> <#-- 定位字段并解析JSON --> <#assign imgElement = saxReaderUtil.createXPath("dynamic-element[@name='Imagean48']").selectSingleNode(curArticle.getDocument()) imgMeta = jsonFactory.createJSONObject(imgElement.getStringValue()) imgUrl = themeDisplay.getPortalURL() + "/documents/" + imgMeta.getString("groupid") + "/0/" + imgMeta.getString("name") + "/" + imgMeta.getString("uuid") imgAlt = imgMeta.getString("alt")!imgMeta.getString("name") /> <#-- 渲染图片标签 --> <img src="${imgUrl}" alt="${imgAlt}" />
方案2:通过文件ID查询文件实体(适合需要额外文件信息的场景)
如果需要获取文件的大小、修改时间等更多属性,可以调用DLAppService查询文件实体:
<#-- 引入所需工具类 --> <#assign jsonFactory = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactoryUtil") dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService") /> <#-- 定位字段解析并查询文件 --> <#assign imgElement = saxReaderUtil.createXPath("dynamic-element[@name='Imagean48']").selectSingleNode(curArticle.getDocument()) imgMeta = jsonFactory.createJSONObject(imgElement.getStringValue()) fileEntry = dlAppService.getFileEntry(imgMeta.getLong("fileEntryId")) imgUrl = themeDisplay.getPortalURL() + fileEntry.getPreviewURL(themeDisplay) imgAlt = imgMeta.getString("alt")!fileEntry.getTitle() /> <#-- 渲染图片标签 --> <img src="${imgUrl}" alt="${imgAlt}" />
注意事项
如果模板运行提示找不到serviceLocator,需要进入后台:控制面板 > 系统设置 > 模板引擎 > 自由标记,将serviceLocator添加到「允许的变量名」列表中即可。
内容的提问来源于stack exchange,提问作者Chris Olzacki
相关产品推荐
相关产品推荐

