快速业务通道

精通Grails: Grails服务和Google地图 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
tent.text      def geonames = new XmlSlurper().parseText(xml)      result.name = geonames.geoname.name as String      result.lat = geonames.geoname.lat as String      result.lng = geonames.geoname.lng as String      result.state = geonames.geoname.adminCode1 as String      result.country = geonames.geoname.countryCode as String     }     else{      log.error("GeocoderService.geocodeAirport FAILED")      log.error(url)      log.error(connection.responseCode)      log.error(connection.responseMessage)     }     return result    } }

geocodeAirport 方法的第一部分构建 URL 并进行连接。查询字符串元素先集中在一个 ArrayList 里 ,然后和一个 & 符号连接起来。方法的最后部分使用 Groovy XmlSlurper 解析 XML 结果并将结果 存储在 hashmap 里。

精通Grails: Grails服务和Google地图(3)

时间:2011-07-29 IBM Scott Davis

Groovy 服务不可以直接从 URL 访问。如果您想在 Web 浏览器中测试这个新的服务方法,请将一个简 单的闭包添加到 AirportController,如清单 4 所示:

清单 4. 在控制器中向服务提供一个 URL

import grails.converters.* class AirportController {   def geocoderService   def scaffold = Airport   def geocode = {    def result = geocoderService.geocodeAirport(params.iata)    render result as JSON   }   ... }

如果您定义一个与服务同名的成员变量,Spring 会自动地将服务注入控制器(要想让这种方法奏效, 您必须把服务名的第一个字母由大写改为小写,使它遵循 Java 风格的变量命名约定)。

要测试服务,请在 Web 浏览器中输入 URL http://localhost:9090/trip/airport/geocode?iata=den 。您将看到如清单 5 所示的结果:

清单 5. 地理编码器请求的结果

{"name":"Denver International Airport", "lat":"39.8583188", "lng":"-104.6674674", "state":"CO", "country":"US"}

AirportController 中的 geocode 闭包只是用于对服务进行检查。因此,可以把它删除,或者保留下 来供以后的 Ajax 调用使用。下一步是重新构造 Airport 基础设施,以利用这个新的地理编码服务。

加入服务

首先,把新的 lat 和 lng 字段添加到 grails-app/domain/Airport.groovy,如清单 6 所示:

清单 6. 把 lat 和 lng 字段添加到 Airport POGO

class Airport{   static constraints = {    name()    iata(maxSize:3)    city()    state(maxSize:2)    country()   }   String name   String iata   String city   String state   String country = "US"   String lat   String lng   String toString(){    "${iata} - ${name}"   } }

精通Grails: Grails服务和Google地图(4)

时间:2011-07-29 IBM Scott Davis

在命令提示处输入 grails generate-views Airport 来创建 GSP 文件。借助 AirportController.groovy 的 def scaffold = Airport 行,从运行时开始就一直在动态搭建 GSP 文件 。要想对这个视图进行更改,我必须先处理代码。

创建新的 Airport 时,我将把用户可编辑字段限制为 iata 和 city。要想让地理编码查询能够工作 ,必须具备 iata 字段。我没有更改 city,因为我喜欢由自己来提供这个信息。DEN 真的就在丹佛 (Denver),但 ORD(Chicago O''Hare)却在伊里诺斯州的罗斯蒙特(Rosemont)

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号