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

FreeMarker中如何查看变量赋值?类似JS console.log的调试方法

FreeMarker查看变量实际值的调试方法

FreeMarker没有和JavaScript里console.log()完全1:1对应的原生语法,但下面这几个方法完全可以实现等效的调试效果,开发时查变量值非常方便:

  • 快速打印普通变量值
    普通的字符串、数字、布尔值这类简单类型变量,直接用插值输出加转义就行,避免输出的内容打乱页面结构:
    <#-- 查看变量x的实际值,?html做HTML转义,避免特殊字符渲染异常 -->
    ${x?string?html}
    
  • 打印复杂对象/列表/哈希的完整结构
    如果你用的是FreeMarker 2.3.27及以上版本,直接用内置的?dump函数就行,效果和JS里console.log打印对象的展开结构几乎一致,不仅能看单个变量,还能直接看整个数据模型的所有变量:
    <#-- 打印单个变量x的完整结构,pre标签保留缩进换行格式 -->
    <pre>${x?dump?html}</pre>
    
    <#-- 打印当前模板上下文里所有可用变量的全集 -->
    <pre>${.data_model?dump?html}</pre>
    
    要是你用的FreeMarker版本比较老没有?dump,对于哈希/对象类型的变量,可以遍历它的所有可访问键值对逐个打印:
    <#if x?is_hash>
      <ul>
      <#list x?keys as prop>
        <li><strong>${prop?html}</strong>: ${x[prop]?string?html}</li>
      </#list>
      </ul>
    </#if>
    
  • 开发环境全局调试配置
    本地开发时可以把FreeMarker的异常处理器配置为html_debug模式,一旦模板执行出错,错误页会自动展示当前执行栈、上下文内所有变量的取值和结构,不用手动在模板里加打印语句就能快速定位变量问题。
  • 输出调试信息到服务端日志
    如果你不想把调试内容打到渲染的页面上,可以提前在数据模型中注入一个日志实例,再封装个简单的自定义宏,就能实现和console.log几乎一致的调用体验,调试信息会直接打到服务端日志里:
    <#-- 提前定义通用日志宏 -->
    <#macro consoleLog val>
      <#assign _ = logger.debug("[FTL DEBUG] 变量值: {}", val?string) >
    </#macro>
    
    <#-- 需要调试时直接调用即可 -->
    <@consoleLog x />
    

注意:如果打印Java对象时发现某些属性看不到,先确认对应属性有没有提供公共的getter方法,FreeMarker是通过JavaBean规范访问对象属性的,没有公共访问权限的属性读不到属于正常情况。

内容的提问来源于stack exchange,提问作者Hemanth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:48:21