我想在我的应用程序中使用g:timeZoneSelect
标记,问题是我发现生成的html选择非常压倒性。
正在显示超过600个选项,恕我直言,这是向用户显示的内容。也许有人可以指出一个更易于管理的时区列表的例子?也许你看过一个可以很好地进行时区选择的网站?我确定超过600选项在技术上是正确的,但这对用户来说就像是噪音。
时区的显示值为long。
E.g。 “CST,Central Standard Time(South Australia / New South Wales)9.5:30.0”
只是“CST,中央标准时间”或“澳大利亚/ Broken_Hill”会更好
有没有办法通过某种类型的标记属性(无法在文档中找到任何属性)或我不知道的配置来解决这些问题?
或者,我最好将html选择包装在自定义标签lib中并“滚动我自己的”解决方案(我不喜欢)。
谢谢
答案 0 :(得分:5)
查看源代码,无法覆盖“optionValue”属性,因为它是在taglib方法本身中设置的
所以我想你必须自己动手: - (
source for the original tag is here,这应该是一个很好的起点。你可能需要这样的东西:
class MyNewTagLib {
static namespace = 'my'
def tzSelect = { attrs ->
attrs['from'] = TimeZone.getAvailableIDs();
attrs['value'] = (attrs['value'] ? attrs['value'].ID : TimeZone.getDefault().ID)
def date = new Date()
// set the option value as a closure that formats the TimeZone for display
attrs['optionValue'] = {
TimeZone tz = TimeZone.getTimeZone(it);
def shortName = tz.getDisplayName(tz.inDaylightTime(date), TimeZone.SHORT);
def longName = tz.getDisplayName(tz.inDaylightTime(date), TimeZone.LONG);
return "${shortName}/${longName}"
}
// use generic select
out << g.select(attrs)
}
}
然后你可以这样做:
<my:tzSelect/>