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

Quarkus Qute 3.16.x调用Java方法参数值异常求助

Qute 3.16.1循环中调用Java方法时参数异常问题

问题现象

升级Quarkus Qute从3.15.2到3.16.1后,在模板的嵌套循环中出现异常:

  • 直接输出{project.name}能正确显示当前循环项的项目名称
  • 调用Java方法schedules.forProjectAndName(project, name, project_index)时,方法接收到的project参数始终是外层循环的第一个项目对象,与模板渲染的当前项目不一致

模板代码片段:

{#for project in schedules.projects}
  {#for name in schedules.names}
    <script>console.log("Name: Project.name = [{project.name}]");</script>
    {#let schedule = schedules.forProjectAndName(project, name, project_index)}
    ........
  {/for}
{/for}

Java方法代码片段:

public PipelineSchedule forProjectAndName(final Project project, final String scheduleName, final int indexCount) {
    log.info("Name: Project.Name = [{}], ScheduleName = [{}], indexCount = [{}]", project.name(), scheduleName, indexCount);
    // 方法逻辑
}

原因分析

这是Quarkus Qute 3.16.x版本的已知bug:模板渲染时的循环变量绑定优化逻辑出现问题,内层循环调用Java方法时,Qute没有正确捕获外层循环的当前project变量实例,而是错误复用了第一次循环时的变量引用,导致后续方法调用始终传递第一个项目对象。

解决办法

临时修复方案

  1. 局部变量中转:在外层循环内部将当前project赋值给局部临时变量,通过强制触发变量重新绑定,避免Qute复用旧引用:
{#for project in schedules.projects}
  {#let currentProject = project}
  {#for name in schedules.names}
    <script>console.log("Name: Project.name = [{project.name}]");</script>
    {#let schedule = schedules.forProjectAndName(currentProject, name, project_index)}
    ........
  {/for}
{/for}
  1. 传递唯一标识替代对象:修改Java方法参数,改用项目唯一标识(如ID)替代Project对象传递,在方法内部通过标识查询对应实例:
// 修改后的Java方法
public PipelineSchedule forProjectAndName(final String projectId, final String scheduleName, final int indexCount) {
    Project project = projectRepository.findById(projectId);
    log.info("Name: Project.Name = [{}], ScheduleName = [{}], indexCount = [{}]", project.name(), scheduleName, indexCount);
    // 方法逻辑
}

模板对应修改:

{#let schedule = schedules.forProjectAndName(project.id, name, project_index)}
  1. 版本回退:暂时降级到Qute 3.15.2版本,等待Quarkus官方修复该bug后再升级。

长期解决方案

关注Quarkus官方更新日志,确认该bug是否已被修复;若未修复,可提交包含复现案例的issue到Quarkus开发团队,推动问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:12:38