You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:45:04