使用Grails g:timeZoneSelect标签?

时间:2010-05-28 06:58:16

标签: grails groovy timezone

我想在我的应用程序中使用g:timeZoneSelect标记,问题是我发现生成的html选择非常压倒性。

  1. 正在显示超过600个选项,恕我直言,这是向用户显示的内容。也许有人可以指出一个更易于管理的时区列表的例子?也许你看过一个可以很好地进行时区选择的网站?我确定超过600选项在技术上是正确的,但这对用户来说就像是噪音。

  2. 时区的显示值为long。

  3. E.g。 “CST,Central Standard Time(South Australia / New South Wales)9.5:30.0”

    只是“CST,中央标准时间”或“澳大利亚/ Broken_Hill”会更好

    有没有办法通过某种类型的标记属性(无法在文档中找到任何属性)或我不知道的配置来解决这些问题?

    或者,我最好将html选择包装在自定义标签lib中并“滚动我自己的”解决方案(我不喜欢)。

    谢谢

1 个答案:

答案 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/>