Grails g:countrySelect以完整的国家名称作为值

Grails g:countrySelect以完整的国家名称作为值,grails,groovy,Grails,Groovy,我想使用g:countrySelect存储确切的国家名称。以德国为例,而不是德国。它是下拉菜单中的值。下拉文本是德国,但当它保存到数据库时,它会更改回国家代码。抱歉,如果我有点天真,但我已经搜索了近3个小时的解决方案,它没有很好的记录在grails网站。我可以选择任何替代方案,甚至ajax。只要有一个简单的方式来显示一个国家的名单,将能够存储国家的真实姓名,而不是国家代码。谢谢大家! 您可以使用此功能将ISO3国家代码转换为国家名称 def getCountryName(String count

我想使用g:countrySelect存储确切的国家名称。以德国为例,而不是德国。它是下拉菜单中的值。下拉文本是德国,但当它保存到数据库时,它会更改回国家代码。抱歉,如果我有点天真,但我已经搜索了近3个小时的解决方案,它没有很好的记录在grails网站。我可以选择任何替代方案,甚至ajax。只要有一个简单的方式来显示一个国家的名单,将能够存储国家的真实姓名,而不是国家代码。谢谢大家!

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

def getCountryName(String countryCode) {
  Locale.availableLocales.find{it.ISO3Country == countryCode}.displayCountry
}

// Test
println getCountryName('DEU')  // prints 'Germany'

如果您希望在GSP中执行此操作,最好将其作为标记库提供。

不确定上述解决方案何时停止工作,但如果您现在尝试此操作,您将得到一个错误:

Couldn't find 3-letter country code for CS
对于最新的grail版本,当前获取完整国家名称的方法是使用以下标记:

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

我知道这个线程很旧,但我一直在寻找相同的问题,我不得不分享我的解决方案

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

def country = CountryTagLib.ISO3166_3[code]

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

您可能必须对国家代码调用toUpperCase()。默认情况下,countrySelect标记以小写形式存储代码。