gpt4 book ai didi

select - 在g.select中填充列表

转载 作者:行者123 更新时间:2023-12-02 14:34:15 25 4
gpt4 key购买 nike

我需要以编程方式加载列表。
代替:

<g:select 
name="cars"
from="${Car.list()}"
value="${person?.cars*.id}"
optionKey="id"
multiple="true" />

我想这样做是因为列表并不总是来自同一来源
g.select(name : searchfield.fieldName,                          
class : "fillWidth searchfield",
multiple : "true",
from : ${ searchfield.fieldFrom },
optionKey : searchfield.fieldKey,
optionValue : searchfield.fieldValue)

从不加载。与列表,我收到一条错误消息:

没有方法签名:sample.SearchTagLib。$()适用于参数类型:(sample.SearchTagLib $ _getSelectField_closure5)值:[sample.SearchTagLib$_getSelectField_closure5@1187b50]可能的解决方案:is(java.lang.Object),any( ),use([Ljava.lang.Object;),any(groovy.lang.Closure),wait(),grep()

最佳答案

您不需要${}选项中的from

g.select(name : searchfield.fieldName,                          
class : "fillWidth searchfield",
multiple : "true",
from : searchfield.fieldFrom,
optionKey : searchfield.fieldKey,
optionValue : searchfield.fieldValue)

在Groovy代码中, ${}是一种将Groovy表达式放入双引号GString中的方法,如果您不在GString中,则可以直接使用该表达式而无需将其包装在 ${}中。

从您的评论中编辑

The fieldFrom at this point is a string which would get its value from a database. So the value in the DB is "Car.list()" which in the prototype I need to convert to a bound able or execute-able line of code.



通常不建议您允许您的应用执行用户提供的任意Groovy代码片段(出于明显的安全原因)。只要代码片段来自安全来源(例如受信任的管理员用户),而且足够公平,就可以使用 GroovyShell
def from = new GroovyShell().evaluate(searchfield.fieldFrom)

但这可能效率很低,每次创建一个新的类加载器并解析并编译整个Groovy脚本类。如果 fieldFrom值旨在始终从数据库中提取内容(即它们始终像 Car.list()Vehicle.findAllByNumberOfWheelsGreaterThan(2)之类的东西,而不是像 [1,2,3]这样的任意Groovy),那么将HQL表达式存储在 fieldFrom中并使用 executeQuery运行它们可能会更好
def from = AnyDomainClass.executeQuery(searchfield.fieldFrom)

( executeQuery是静态的GORM方法,您需要在特定的域类上调用它,但它可以返回任何类型的结果)。 HQL等效于 Car.list()将为“ from Car”,等效于 Vehicle.findAllByNumberOfWheelsGreaterThan(2)将为“ from Vehicle where numberOfWheels > 2”,依此类推。

关于select - 在g.select中填充列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18021983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com