【问题标题】:g:countrySelect with full country name as valueg:countrySelect 以完整的国家名称作为值
【发布时间】:2010-05-26 12:07:18
【问题描述】:

我想使用 g:countrySelect 存储确切的国家/地区名称。例如德国而不是 DEU。它是下拉菜单中的值。下拉文本是德国,但当它保存到数据库时,它会变回国家代码。对不起,如果我有点天真,但我一直在寻找近 3 个小时的解决方案,并且在 grails 网站上没有很好的记录。我可以选择任何替代方案,甚至 ajax。只是为了有一种简单的方法来显示国家列表,并且能够存储国家的真实名称而不是国家代码。谢谢!

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

    您可以使用此函数将 ISO3 国家代码转换为国家名称

    def getCountryName(String countryCode) {
      Locale.availableLocales.find{it.ISO3Country == countryCode}.displayCountry
    }
    
    // Test
    println getCountryName('DEU')  // prints 'Germany'
    

    如果您想在 GSP 中执行此操作,最好将其作为 TagLib 提供。

    【讨论】:

    • 您可能需要在您的国家/地区代码上调用 toUpperCase()。默认情况下,countrySelect 标记以小写形式存储代码。
    【解决方案2】:

    不确定上述解决方案何时停止工作,但如果您现在尝试,您会收到错误消息:

    Couldn't find 3-letter country code for CS
    

    在最新的grail版本中,目前获取完整国家名称的方法是使用这个标签:

    <g:country code="${country}"/>
    

    【讨论】:

      【解决方案3】:

      我知道这个帖子很旧,但我一直在寻找同样的问题,我不得不分享我的解决方案。

      您可以使用CountryTagLib 对象将 ISO3 代码转换回完整的国家/地区名称,如下所示:

      def country = CountryTagLib.ISO3166_3[code]
      

      “code”属性是您从 获得的 ISO3 代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-19
        • 1970-01-01
        • 2020-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多