grails - 限制选择框的枚举值

标签 grails

在我的应用程序的某些部分,网页需要有一个包含 2 个选项的选择框 - 男性、女性。在应用程序的其他部分,选择框需要有 3 个选项 - 男性、女性或未知

在 g:select 中,如何传入 from 字段的枚举子集,同时不更改键或值参数的写入方式? g:select 位于 taglib 中并接受任何类型的 Enum(即使它显示性别,这实际上是 taglib 的传入字段),因此唯一的字段 可以更改的是调用 gsp 中的 from 字段。

普惠制:

 <myapp:select fieldName="gender" 
                                  from="${Gender}"
                                  value="${command?.gender?.key}" noSelection="${['':'No answer...']}" />

标签库:

            <g:select name="${fieldName}"
                      from="${from.values()}"
                      keys="${from.values()*.name()}"
                      value="${value}"
                      noSelection="${noSelection}"/>

枚举类:

public enum Gender {
    M('Male'),
    F('Female'),
    U('Unknown')

    final String value

    Gender(String value) {
        this.value = value
    }
    public String toString() {
        value
    }
    public String getKey() {
        name()
    }
    public String getValue() {
        value
    }
}

或者有没有办法让 Gender 的子类具有附加的 U('Unknown') 选项。我也尝试过,但没有成功:

public static final List<Gender> getPartial() {
    [M, F]
}

最佳答案

您可以在 GSP 上过滤它或将其完全移至 Controller 。

<g:select name="genderPreference" from="${GenderPreference.values().findAll {
       !it.value.contains('Male')
}}" 
keys="" value="${profileInstance?.genderPreference?.name()}" noSelection="['': '']"/> 

您需要对您的Keys执行同样的操作。也许将其移至您的 Controller 中会更好。

关于grails - 限制选择框的枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940961/

相关文章:

grails - 使用内部工件镜像和用户凭证解决最初的Grails依赖关系

grails - 没有为自定义操作调用Grails筛选器

grails - Grails批处理作业

grails - 如何清除和替换 Grails/Groovy 中一对多关系中的集合

java - 创建 blob - java 堆空间

grails - 为什么这种通用用法在 groovy 中不起作用?

grails - 在 Controller 中调用update()后,Grails会更改默认显示 View

grails - grails验证嵌套的命令对象不起作用

grails - Grails 中的 MappedSuperclass 替代方案

maven - Grails和GGTS在哪里存储Maven依赖项?