我在文档中看到了两种解决方案。
一个是给我们keys
标签的参数:
<g:select id="active" name="active" from="${['Enabled','Disabled']}" keys="${[1,0]}" value="${userInstance?.active}" />
这提供了不同的键列表与值列表。
另一种解决方案是使用optionKey
and/oroptionValue
参数,但这将要求列表包含对象或可用于查找值的类似内容:
在src/groovy/BooleanSelectOption.groovy
:
class BooleanSelectOption {
String name
String value
private BooleanSelectOption(name, value) {
this.name = name
this.value = value
}
private static List _list;
public static List getList() {
if(!BooleanSelectOption._list) {
BooleanSelectOption._list = [new BooleanSelectOption('Enabled',1), new BooleanSelectOption('Disabled',2)]
}
BooleanSelectOption._list
}
public String toString() { name }
}
在您看来:
<g:select id="active" name="active" from="${BooleanSelectOption.list}" optionKey="value" value="${userInstance?.active}" />
现在标签正在根据列表中项目的 bean 属性查找键。此外,enum
也可能在这里工作。
显然,第一种技术对于短列表来说更简洁,但我想在更复杂的情况下展示这两种选择。我也没有测试第二个例子。
还有一点需要注意:您可能会发现这些键0
并1
没有真正起作用,因为Disabled
如果值为 . 则不会被选中(根据我的经验)false
。我不知道你是否可以使用true
and false
,但你应该测试以确保你得到你期望的东西。
实际上还有第三种选择,可能是最强大的解决方案,也在文档中:
使用该valueMessagePrefix
参数允许从 i18n 消息中查找显示的值。
在grails-app/i18n/messages.groovy
:
boolean.select.0=Disabled
boolean.select.1=Enabled
在您看来:
<g:select id="active" name="active" from="${[1,0]}" value="${userInstance?.active}" valueMessagePrefix="boolean.select" />
如果您需要,这还有一个额外的好处,即允许您为不同的语言使用不同的标签。