快速业务通道

精通Grails: 使用Ajax实现多对多关系 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
United Airlines</option> <option value="2" >DAL - Delta</option> <option value="3" >COA - Continental</option> </select>

<g:select> 标记的 optionKey 属性指定一个 类的哪个字段将会存储在关系的另一端的多个 字段的值中。Airline 表的主键(airline.id)会作为 Flight 表的外键。在选择字段中,请注意 airline.id 是可选值(调用 Airline.toString() 方法来显示值)。如果您想要更改选项的排列顺序, 可以将 GORM 调用由 Airline.list() 更改为 Airline.listOrderByIata()、 Airline.listOrderByName() 或想要使用的任何其他字段。

使用 Ajax 处理大量选项

默认的选择控件是显示实际航空公司数量的不错选择。不幸的是,对于机场情况则有所不同。我在一 年中可能会到达 40 或 50 个不同的机场。依我的经验,在一个字段中提供超过 15 或 20 个选择就有点 令人讨厌了。

幸运的是,机场的 IATA 编码在行业中得到了广泛应用。我研究航班的时候会见到它们。在预订航班 时也会 在收据上显示。甚至在机票上也能见到。与要求用户滚动查找数百个可能的机场相比,要求他们 输入 IATA 编码一个不错的替代方法。

回顾一下我在本文开始部分介绍的 Book 示例。Amazon.com 在其主页上提供了显示所有库存图书的选 择字段了吗?没有 — 它提供了一个文本字段,您可以在其中输入图书的标题、作者,如果您喜欢,甚至 还可以输入国际标准图书编号(International Standard Book Number,ISBN)。我将在此处使用相同的 技巧来处理 trip-planner 应用程序中的机场。

将控件由一个选择字段更改为一个文本字段非常简单。但是,在我继续使用这种解决方案的方法之前 ,我想要花一些时间处理它的语义。iata 字段是一个没有形式限制的文本字段,但是我不能对用户输入 的任何值都接受(如果您写错了您的名字,应用程序不会责备您;但是如果您输错了 IATA 编码,它就需 要给出警告)。我希望这种反馈回立即发生,因为没有什么事情比每次输入无效值之后重复提交整个 HTML 表单更令人沮丧。

所以,我不希望只是为了验证一个单个字段要在服务器间往返通信整个表单,或者每次都需要将数千 个机场的 IATA 编码下载到客户端。该解决方案将数据保存在服务器上,并针对每个字段执行一个细粒度 的 HTTP 请求,而不是对整个表单执行一个粗粒度的请求。这种技术称为执行 Ajax (Asynchronous JavaScript + XML) 请求(参见 参考资料,获取 Ajax 的介绍)。

要使我的 Grails 应用程序支持 Ajax,我需要对 AirportController 进行调整,以接受 Ajax 请求 ,还要对视图进行调整,以执行 Ajax 请求。我将从 AirportController 入手。

AirportController 已经拥有搭建好的闭包,用于返回一个 Airport 列表,并显示一个单独的 Airport。但是,这些现有的闭包返回的值是 HTML 格式的。我将添加一个返回原始数据的新闭包。一个 选择是完全将 POGO 序列化,但是我的客户机是一个 Web 浏览器。不幸的是,JavaScript — 不是 Groovy — 才是 Web 浏览器支持的语言(Mozilla Foundation,您注意到了吗?)

Ajax 中的 x 提醒了我,我可以返回 XML。如果将 grails.converters 包导入 AirportController 中,返回 XML 只需要一行代码,如清单 11 所示:

清单 11. 从 controller 返回 XML

import grails.converters.* class AirportController {   def scaffold = Airport   def getXml = {    render Airport.findByIata(params.iata) as XML   }  }

精通Grails: 使用Ajax实现多对多关系(6)

时间:2011-08-02 IBM Scott Davis

这种解决方案的惟一问题是,JavaScript 对 XML

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号