Liferay7.4无需JSON转换从DDMFormField图片字段获取URL的方法
Liferay 7.4 FreeMarker模板获取图片字段URL无JSON转换方案
在Liferay 7.4环境下存在原生无需手动转换JSON的实现方案,以下是两种可直接落地的实现方式:
方案1:使用DDM字段渲染器直接获取解析后的值
Liferay 自带的ddmFormFieldValueRendererRegistry工具已经内置了图片类型字段的解析逻辑,不需要手动处理JSON字符串,FreeMarker模板上下文默认已注入该工具对象:
<#-- 保留你原有的getFieldData函数 --> <#function getFieldData ddmFormFieldValues fieldReference> <#list ddmFormFieldValues as ddmFormFieldValue> <#if ddmFormFieldValue.getDDMFormField().getFieldReference()==fieldReference> <#if (ddmFormFieldValue)??> <#return ddmFormFieldValue /> <#else> <#return null /> </#if> </#if> </#list> <#return null /> </#function> <#-- 原有获取字段的逻辑 --> <#assign ddmFormValuesReader = assetRenderer.getDDMFormValuesReader() /> <#assign ddmFormFieldValues = ddmFormValuesReader.getDDMFormValues().getDDMFormFieldValues()/> <#assign newsImage = getFieldData(ddmFormFieldValues, 'featuredImage') /> <#-- 新增:调用图片字段渲染器直接获取解析后的属性 --> <#assign imageFieldRenderer = ddmFormFieldValueRendererRegistry.getDDMFormFieldValueRenderer("image")> <#assign parsedImageValue = imageFieldRenderer.getValue(locale, newsImage)> <#-- 直接取url属性即可 --> <#if parsedImageValue.url??> ${parsedImageValue.url} </#if>
方案2:获取FileEntry实例生成标准访问URL
如果需要生成适配权限、支持CDN、带完整域名的标准图片URL,可以通过字段解析后的文件ID调用文档库工具生成地址:
<#-- 承接方案1中解析得到的parsedImageValue --> <#assign fileEntry = dlAppLocalService.getFileEntry(parsedImageValue.fileEntryId?number)> <#assign standardImageUrl = dlAppHelper.getDownloadURL(fileEntry, fileEntry.getVersion(), themeDisplay, "")> ${standardImageUrl}
说明:
dlAppLocalService、dlAppHelper均为Liferay FreeMarker模板默认注入的工具类,无需额外声明即可使用。
方案对比
- 方案1代码量最少,和现有逻辑衔接顺滑,性能优于手动JSON转换,适合内部页面展示场景
- 方案2生成的URL规范性更高,适配Liferay的权限控制、多站点配置,适合对外分发图片地址的场景
内容的提问来源于stack exchange,提问作者ali
相关产品推荐
相关产品推荐

