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

Velocity中if条件不生效且foreach循环重复执行的问题排查

Velocity 循环重复执行&属性校验问题解决方案

问题根因

你遇到的foreach循环执行两次的问题,核心原因是你遍历的CartaPorte.Ubicaciones.Ubicacion数组本身包含2个元素,分别对应始发地节点、目的地节点,循环默认遍历所有元素自然会执行两次。
同时你提到的if条件判断异常,大概率是属性层级取错导致:你提供的JSON结构里,CartaPorte根节点和Ubicacion数组内的始发地节点都存在NombreRemitente属性,两个位置的属性值不同,没有明确指定层级就会出现判断不符合预期的情况。

解决方案

场景1:仅需提取一次收发件人信息生成表格

不需要遍历数组,直接通过下标定位对应节点取值即可,示例代码如下:

## 取发件人信息(数组第一个元素对应始发地)
#set($remitente = $CartaPorte.Ubicaciones.Ubicacion[0].Origen)
发件人姓名:$remitente.NombreRemitente
发件人RFC:$remitente.RFCRemitente

## 取收件人信息(数组第二个元素对应目的地)
#set($destinatario = $CartaPorte.Ubicaciones.Ubicacion[1].Destino)
收件人姓名:$destinatario.NombreDestinatario
收件人RFC:$destinatario.RFCDestinatario

场景2:需要遍历数组做全量属性校验

在循环内增加节点存在性判断,避免无效逻辑执行,同时补充属性非空校验,示例代码如下:

#foreach($ubicacion in $CartaPorte.Ubicaciones.Ubicacion)
    ## 校验始发地节点属性
    #if($ubicacion.Origen)
        #if($ubicacion.Origen.NombreRemitente && $ubicacion.Origen.NombreRemitente.trim() != "")
            发件人姓名校验通过:$ubicacion.Origen.NombreRemitente
        #else
            发件人姓名为空,校验不通过
        #end
        #if($ubicacion.Origen.RFCRemitente && $ubicacion.Origen.RFCRemitente.trim() != "")
            发件人RFC校验通过:$ubicacion.Origen.RFCRemitente
        #else
            发件人RFC为空,校验不通过
        #end
    #end

    ## 校验目的地节点属性
    #if($ubicacion.Destino)
        #if($ubicacion.Destino.NombreDestinatario && $ubicacion.Destino.NombreDestinatario.trim() != "")
            收件人姓名校验通过:$ubicacion.Destino.NombreDestinatario
        #else
            收件人姓名为空,校验不通过
        #end
        #if($ubicacion.Destino.RFCDestinatario && $ubicacion.Destino.RFCDestinatario.trim() != "")
            收件人RFC校验通过:$ubicacion.Destino.RFCDestinatario
        #else
            收件人RFC为空,校验不通过
        #end
    #end
#end

注意事项

如果你的校验规则需要用到CartaPorte根节点下的NombreRemitente、RFCRemitente属性,直接取值$CartaPorte.NombreRemitente即可,不要和数组内的同名属性混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:24:03