Grails使用get(params.id)无法从列表中检索单个项目

时间:2016-02-08 06:24:06

标签: grails grails-controller

我有一个表格,您输入的信息然后显示,当您点击它的名称时,我希望它转到一个新页面,它只显示点击的项目而不是所有内容。

这是我的控制器......

   <g:each var="Recipes" in="${recipe}">
    <tbody>
        <tr>
            <td><g:link action="showRecipe" id="${Recipes.id}">${Recipes.name}</g:link></td>
        </tr>
    </tbody>
   </g:each>

}

我的index.gsp,其中食谱名称是可点击的,应按ID重定向到新页面,只显示该食谱信息。

<g:each var="rec" in="${recipe}">
    <tbody>
    <tr>
        <td>${rec.name}</td>
    </tr>
    </tbody>
</g:each>

最后是我的showRecipe.gsp,配方应该自己显示......但它会一直显示我添加的所有这些

span

任何指导都会很棒!感谢

1 个答案:

答案 0 :(得分:1)

我可以说你的第一个错误出现在索引中。

您所拥有的Recipe.id可能正在检索所有ID并在链接中发送它们。您不应在属性名称中使用UpperCase,编译器可能会将该属性视为Class。代码应该更像:

    

        <tr>
            <td><g:link action="showRecipe" id="${recipes.id}">${recipes.name}</g:link></td>
        </tr>

</g:each>

在show()动作中添加println(params)或log.info(params)以打印所有参数,并准确查看从视图中接收的内容。

还要注意您的命名约定。您可能想要更改recipeList或其他东西的配方,以及配方到recipeInstance或简单配方。它将使代码更具可读性,并使我们更容易为您提供帮助。

修改

正如@Nitin Dhomse所说,你只需要访问单个食谱的数据,所以你不需要这样做

<g:each var="rec" in="${recipe}"> 
你的show.gsp中的

更像是

<table>
 <tbody>
  <tr>
    <td>${recipe?.id}</td>
    <td>${recipe?.name}</td>
     ....
 </tbody>
</table>

此外,如果您没有找到配方实例,或者在show.gsp中访问诸如$(recipe?.name)之类的属性,则应该在show()操作中重定向,否则您将获得nullPointer Exceptions。