2010-05-28 74 views
0

我想在我的應用程序中使用g:timeZoneSelect標記,問題是我發現生成的html選擇是相當壓倒性的。使用Grails g:timeZoneSelect標籤?

  1. 超過600個選項正在顯示,恕我直言,這是很多要顯示給用戶。也許有人可以給我一個更容易管理的時區列表的例子嗎?也許你看過一個能夠很好地選擇時區的網站?我確定超過600選項「技術上」是正確的,但這對用戶來說看起來像噪音。

  2. 時區的顯示值很長。

例如, 「CST,中部標準時間(南澳大利亞/新南威爾士州)9.5:30.0」

只是「CST,中部標準時間」或「澳大利亞/布羅肯希爾」會更好

有沒有辦法來解決這些通過某種類型的標籤屬性發現問題(無法找到任何文檔)或配置,我不知道?

或者,我最好打賭自定義標籤庫中包裝一個html選擇,並「滾動我自己的」解決方案(我不喜歡)。

感謝

回答

5

在看看源,有沒有辦法覆蓋「optionValue」屬性,因爲它是在標籤庫方法本身

所以我想你必須滾動設置您的。自己:-(

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

然後你合作uld do:

<my:tzSelect/>