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

Spring Boot整合Freemarker更新表数据时触发模板空值异常

报错根因
  1. 控制器层传参错误:ProdottoController的/lista接口中,JPA的findById方法返回的是Optional<Prodotto>包装类,你直接将这个Optional对象存入Model传给FreeMarker视图,没有取出包装的实际Prodotto实体。FreeMarker拿到的是Optional容器对象,该类本身没有nome/id/descrizione这些属性,访问对应属性时自然触发空值/不存在错误。
  2. 模板存在语法笔误:编辑表单的提交按钮闭合标签写错,写成了/S,不符合HTML标签规范,会导致页面渲染异常。
  3. 空判断逻辑不严谨:模板中仅判断了prodottoDaModificare变量是否存在,没有判断变量内部的属性是否可访问,极端场景下仍可能触发空指针。
修复方案
  • 修改控制器的产品查询逻辑,将Optional拆包后再传入视图,不要直接传递Optional包装类:
    替换/lista方法中的if判断块代码为以下内容:
    if(idProdotto!=null) {
        Optional<Prodotto> p =  repo.findById(Integer.parseInt(idProdotto));
        // 仅当查询到对应产品记录时,才将实体对象加入模型,未查询到则不设置该属性
        p.ifPresent(prodotto -> mm.addAttribute("prodottoDaModificare", prodotto));
    }
    
  • 修正FreeMarker模板中的标签笔误,找到编辑表单的提交按钮行:
    <!-- 错误写法 -->
    <input type="submit" name="invia" value="Salva modifiche"/S>
    <!-- 替换为正确写法 -->
    <input type="submit" name="invia" value="Salva modifiche"/>
    
  • (可选加固)给模板中prodottoDaModificare的属性访问加空值兜底,避免极端场景报错,例如将${prodottoDaModificare.nome}写法替换为${(prodottoDaModificare.nome)!''},属性不存在时默认展示空字符串即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:45:54