在 Grails g:select 中,使用枚举,显示枚举键,但使用值作为选项的值

问题描述 投票:0回答:3

我想使用 g: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() }
}
grails drop-down-menu enums key
3个回答
1
投票

我使用了 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>

0
投票

我通常将枚举值放在 message.properties 上,这样我就可以灵活地添加任何语言翻译,这也是您正在寻找的目的。

为此,我让枚举实现 MessageSourceResolvable 类。

例如(来源

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() }
}

消息.属性

com.mycompany.Season.SPRING=Spring
com.mycompany.Season.SUMMER=Summer
com.mycompany.Season.AUTUMN=Autumn
com.mycompany.Season.WINTER=Winter

普惠制

<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>

0
投票

您可以直接使用闭包来访问您的 name 属性:

<g:select id="letterRange" name="letterRange" from="${LetterRange}" 
    noSelection="['':'Select Range...']" optionValue="${ {it.name()} }" required=""/>
© www.soinside.com 2019 - 2024. All rights reserved.