Grails - 作为字符串传递的TypeMismatchException id

时间:2014-07-15 10:20:40

标签: grails-controller

我遇到了使用。链接到类实体的UI问题

        <td><g:link controller="publishedShr" action="show" 
            id="${videoShrInstance.publId.id}">
            ${fieldValue(bean: videoShrInstance, field: "publId")}</g:link></td>        

这里是结果网址:

http://localhost:9000/HomeVu1/publishedShr/show/%5B35%5D

应采用以下形式:

http://localhost:9000/HomeVu1/publishedShr/show/35

在同一网页上,我有一个与工作的子实体类似的链接:

    <td><g:link controller = "videoShr" action="show" id="${publishedShrInstance.videoId.id}">
    ${fieldValue(bean: publishedShrInstance, field: "videoId")}</g:link></td>

我正在使用

我已经清理了这个链接最初工作的项目 - 我可以将它转换为Long

-Mike

1 个答案:

答案 0 :(得分:0)

您尝试创建链接的方式是正确的,除了您尝试输出ID的方式。当您尝试输出videoShrInstance.publId.id的值时,它相当于写videoShrInstance*.publId*.id。它被隐式转换为在Groovy中使用spread运算符(星号*运算符)

由于它隐式使用spread运算符并包含在GString中,因此Groovy输出包含&#34; []&#34;的列表的toString()版本。括号。然后它由g:link标记进行网址编码,这就是为什么您的网址如此搞砸了。

您可以将链接更改为以下格式,以正确形成网址:

<td>
     <g:link controller="publishedShr" action="show"   
        id="${videoShrInstance.publId?.getAt(0)?.id}">
        ${fieldValue(bean: videoShrInstance, field: "publId")}</g:link>
</td>

这将输出列表中第一个hasMany实例的id,并且也是null安全的。

查看此脚本以更多地了解此概念:http://groovyconsole.appspot.com/script/5768755258851328