在 Grails g:select 中,使用枚举,显示枚举键,但使用值作为选项的值
In Grails g:select, using an enum, display the enum keys, but use the values as the options' values
我想使用 g:select 标记生成一个 select 框,其中枚举的键显示给用户,而枚举的值在提交表单时传递,使用以下枚举:
public enum LetterRange {
ABCD("a-d"),
EFGH("e-h"),
IJKLM("i-m"),
final String value
AccessLevel(String value) { this.value = value }
String toString() { value }
String getKey() { name() }
}
我使用了 LetterRange 枚举:
public enum LetterRange {
ABCD("a-d"),
EFGH("e-h"),
IJKLM("i-m"),
final String value
AccessLevel(String value) { this.value = value }
String toString() { value }
String getKey() { name() }
}
...就像在 'g:select' 标签中一样:
<g:select id="letterRange" name="letterRange" from="${LetterRange}"
noSelection="['':'Select Range...']" optionValue="key" required=""/>
...在页面上产生了以下 HTML:
<select id="batchRange" name="batchRange">
<option value="a-d">ABCD</option>
<option value="e-h">EFGH</option>
<option value="i-m">IJKLM</option>
</select>
我通常把我的枚举值放在 message.properties 上,这样我就可以灵活地添加任何 lang 翻译,也是你正在寻找的目的。
为此,我让我的枚举实现 MessageSourceResolvable class。
例如(source)
package com.mycompany
enum Season implements org.springframework.context.MessageSourceResolvable {
SPRING, SUMMER, AUTUMN, WINTER
Object[] getArguments() { [] as Object[] }
String[] getCodes() {
["${getClass().name}.${name()}"] as String[]
}
String getDefaultMessage() { name() }
}
message.properties
com.mycompany.Season.SPRING=Spring
com.mycompany.Season.SUMMER=Summer
com.mycompany.Season.AUTUMN=Autumn
com.mycompany.Season.WINTER=Winter
Gsp
<g:select required="${com.mycompany.Season.values}"/>
这会给你一个 Html 这样的:
<select>
<option value = "SPRING"> Spring </option>
<option value = "SUMMER"> Summer </option>
<option value = "AUTUMN"> Autumn </option>
<option value = "WINTER"> Winer </option>
</select>
我想使用 g:select 标记生成一个 select 框,其中枚举的键显示给用户,而枚举的值在提交表单时传递,使用以下枚举:
public enum LetterRange {
ABCD("a-d"),
EFGH("e-h"),
IJKLM("i-m"),
final String value
AccessLevel(String value) { this.value = value }
String toString() { value }
String getKey() { name() }
}
我使用了 LetterRange 枚举:
public enum LetterRange {
ABCD("a-d"),
EFGH("e-h"),
IJKLM("i-m"),
final String value
AccessLevel(String value) { this.value = value }
String toString() { value }
String getKey() { name() }
}
...就像在 'g:select' 标签中一样:
<g:select id="letterRange" name="letterRange" from="${LetterRange}"
noSelection="['':'Select Range...']" optionValue="key" required=""/>
...在页面上产生了以下 HTML:
<select id="batchRange" name="batchRange">
<option value="a-d">ABCD</option>
<option value="e-h">EFGH</option>
<option value="i-m">IJKLM</option>
</select>
我通常把我的枚举值放在 message.properties 上,这样我就可以灵活地添加任何 lang 翻译,也是你正在寻找的目的。
为此,我让我的枚举实现 MessageSourceResolvable class。
例如(source)
package com.mycompany
enum Season implements org.springframework.context.MessageSourceResolvable {
SPRING, SUMMER, AUTUMN, WINTER
Object[] getArguments() { [] as Object[] }
String[] getCodes() {
["${getClass().name}.${name()}"] as String[]
}
String getDefaultMessage() { name() }
}
message.properties
com.mycompany.Season.SPRING=Spring
com.mycompany.Season.SUMMER=Summer
com.mycompany.Season.AUTUMN=Autumn
com.mycompany.Season.WINTER=Winter
Gsp
<g:select required="${com.mycompany.Season.values}"/>
这会给你一个 Html 这样的:
<select>
<option value = "SPRING"> Spring </option>
<option value = "SUMMER"> Summer </option>
<option value = "AUTUMN"> Autumn </option>
<option value = "WINTER"> Winer </option>
</select>