【问题标题】:limit enum values for a select box限制选择框的枚举值
【发布时间】:2023-04-04 02:15:01
【问题描述】:

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

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

gsp:

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

【问题讨论】:

  • 这个枚举是否被持久化了?

标签: grails


【解决方案1】:

您可以在 GSP 上对其进行过滤或将其完全移动到您的控制器中。

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

您需要为您的Keys 做同样的事情。也许将它移到您的控制器中会更好。

【讨论】:

  • 我最终在枚举类中使用了 Alidad 的方法的静态方法: static def sexMFOnly() { Gender.values().findAll {!it.value.contains(Gender.U.value) }.collect() }
【解决方案2】:

你也可以 - 正如你所做的那样 - 让它更短一点:

static sexMFOnly(){ values() - U }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多