在我的应用的某些部分,网页需要有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...']}" />
taglib:
<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]
}
答案 0 :(得分:3)
您可以在GSP上过滤它或将其完全移动到您的控制器。
<g:select name="genderPreference" from="${GenderPreference.values().findAll {
!it.value.contains('Male')
}}"
keys="" value="${profileInstance?.genderPreference?.name()}" noSelection="['': '']"/>
您需要为Keys
做同样的事情。最好将它移动到你的控制器中。
答案 1 :(得分:0)
你也可以 - 就像你做的那样 - 让它缩短一点:
static sexMFOnly(){ values() - U }