无法从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
相关产品推荐
相关产品推荐

