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

无法从GSP将ID传递至Organization控制器confirmed方法

解决GSP传递training.id到控制器confirmed()方法返回NULL的问题

兄弟,我看你遇到了把循环里的training.id传到Organization控制器confirmed()方法后拿到NULL的问题,咱们一步步来排查和解决:

首先先明确你的问题场景:你在GSP里用<g:each>遍历trainingLists,想把每个training的ID传给控制器的confirmed()方法,但调用后打印ID结果是NULL,你的GSP代码片段如下:

<g:each in="${trainingLists}" var="training">

Organization Name:

${training.organization.orgName}

Organization Description:

${trainin...

下面是几个最可能的原因和对应的解决办法:


1. 先检查参数传递的写法是否正确

你没写完的部分应该是触发请求的代码(比如跳转链接或表单),这部分很容易写错:

  • 如果用<g:link>跳转:
    一定要用params属性传递参数,而不是直接把id写在标签里,正确写法是:
    <g:link controller="organization" action="confirmed" params="[id: training.id]">确认操作</g:link>
    
  • 如果用表单提交:
    要在表单里添加隐藏字段来传递ID,确保提交时参数能被控制器捕获:
    <g:form controller="organization" action="confirmed">
      <input type="hidden" name="id" value="${training.id}" />
      <button type="submit">确认</button>
    </g:form>
    

2. 检查控制器方法的参数接收逻辑

确保你的confirmed()方法是通过params.id获取参数,或者参数名完全匹配:

class OrganizationController {
    def confirmed() {
        // 直接通过params获取ID
        def trainingId = params.id
        println "Training ID: ${trainingId}"
        
        // 如果用方法参数接收,要保证参数名是id
        // def confirmed(Long id) { ... }
    }
}

如果方法参数名和传递的参数名不一致(比如写了def confirmed(Long trainingId)但传的是id),就会拿到NULL。

3. 修正GSP里的变量拼写错误

你的代码片段最后出现了${trainin...,明显是training的拼写漏了字母,这种拼写错误会导致整个training对象的引用失效,training.id自然拿不到值,先把这个拼写问题修正。

4. 确认training对象本身的ID是否存在

可以先在GSP循环里临时打印training.id,确认数据本身有没有问题:

<g:each in="${trainingLists}" var="training">
  <!-- 临时打印ID,确认数据是否正常 -->
  <p>当前Training ID: ${training.id}</p>
  
  <!-- 你的原有代码 -->
  <div class="card">
    ...
  </div>
</g:each>

如果这里打印出来就是NULL,那问题出在trainingLists的数据来源上,要去检查查询trainingLists的服务层代码,或者Domain类的ID字段映射是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:07:24