ドキュメントに2つの解決策があります。
1つはkeys
、タグのパラメーターです。
<g:select id="active" name="active" from="${['Enabled','Disabled']}" keys="${[1,0]}" value="${userInstance?.active}" />
これにより、キーのリストと値のリストが異なります。
もう1つの解決策は、optionKey
および/またはoptionValue
パラメーターを使用することですが、これには、値を検索するために使用できるオブジェクトまたは同様のものをリストに含める必要があります。
で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
ここでも機能する可能性があります。
明らかに、最初の手法は短いリストの方がクリーンですが、より複雑な状況では両方のオプションを示したかったのです。2番目の例もテストしていません。
もう1つの注意:値が。の場合、(私の経験では)選択されない0
ため、キー1
が実際には機能しないことに気付くでしょう。とを使用して問題を解決できるかどうかはわかりませんが、期待どおりの結果が得られていることを確認するためにテストする必要があります。Disabled
false
true
false
実際には、ドキュメントにも3番目のオプション、おそらく最も堅牢なソリューションがあります。
この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" />
これには、必要に応じて、言語ごとに異なるラベルを付けることができるという追加の利点があります。