Grails 如何在g:select for optionValue中使用g:render?

Grails 如何在g:select for optionValue中使用g:render?,grails,Grails,我有一个g:select语句,如下所示: <g:select id="gearbox" name="gearbox.id" from="${com.nppc.mes.energyusage.Gearbox.list()}" optionKey="id" optionValue="${ {"${it.gearboxType} - (${it.gearboxRatio})"} }" required="" value="${gearboxVoltageInstance?.gearbox?.id

我有一个g:select语句,如下所示:

<g:select id="gearbox" name="gearbox.id" from="${com.nppc.mes.energyusage.Gearbox.list()}" optionKey="id" optionValue="${ {"${it.gearboxType} - (${it.gearboxRatio})"} }" required="" value="${gearboxVoltageInstance?.gearbox?.id}" class="many-to-one"/>

我添加了一个optionValue属性:
optionValue=“${{{it.gearboxType}-(${it.gearboxRatio})”}}”

这是我想要的

然而,我想展示我的域对象,齿轮箱在任何地方都是一样的。我已经创建了一个模板,并且能够在我的show.gsp上使用g:render标记

我想不出的是如何让这样的东西发挥作用:

optionValue=”“


是否可以使用模板生成进入optionValue的内容?

你可以绕过它,但我觉得这是一个糟糕的设计

正确的方法是向您的域类添加一个helper方法

static transients = [ 'renderedValue' ]

def getRenderedValue(){
   "$gearboxType - $gearboxRatio"
}
然后,只需调用optionValue=“${it.renderedValue}”


此外,如果在域类中指定toString(),这将用于生成默认渲染值

标记可以用作Groovy代码中的常规函数。比如:

optionValue="${g.render(template: '/shared/gearbox', model: [gearbox: it])}"

thx-这起作用了。只是需要保留语法“${…}}”,以使其正常工作。不确定为什么需要额外的卷发,但当我添加它们时,它会起作用。:-)您是否提供在域方法中呈现模板作为更好的设计?