使用 Grails 构建富 Internet 应用程序,第 2 部分: Grails 和 Google Web Toolkit
2009-11-19 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閹冣挃闁硅櫕鎹囬垾鏃堝礃椤忎礁浜鹃柨婵嗙凹缁ㄧ粯銇勯幒瀣仾闁靛洤瀚伴獮鍥敍濮f寧鎹囬弻鐔哥瑹閸喖顬堝銈庡亝缁挸鐣烽崡鐐嶆棃鍩€椤掑嫮宓佸┑鐘插绾句粙鏌涚仦鎹愬闁逞屽墰閹虫捇锝炲┑瀣╅柍杞拌兌閻ゅ懐绱撴担鍓插剱妞ゆ垶鐟╁畷銉р偓锝庡枟閻撴洘銇勯幇闈涗簼缂佽埖姘ㄧ槐鎾诲礃閳哄倻顦板┑顔硷工椤嘲鐣烽幒鎴旀瀻闁规惌鍘借ⅵ濠电姷鏁告慨顓㈠磻閹剧粯鈷戞い鎺嗗亾缂佸鏁婚獮鍡涙倷閸濆嫮顔愬┑鐑囩秵閸撴瑦淇婇懖鈺冪<闁归偊鍙庡▓婊堟煛鐏炵硶鍋撻幇浣告倯闁硅偐琛ラ埀顒冨皺閺佹牕鈹戦悙鏉戠仸闁圭ǹ鎽滅划鏃堟偨缁嬭锕傛煕閺囥劌鐏犻柛鎰ㄥ亾婵$偑鍊栭崝锕€顭块埀顒佺箾瀹€濠侀偗婵﹨娅g槐鎺懳熺拠鑼舵暱闂備胶枪濞寸兘寮拠宸殨濠电姵纰嶉弲鎻掝熆鐠虹尨宸ョ€规挸妫濆铏圭磼濡搫顫嶇紓浣风劍閹稿啿鐣烽幋锕€绠婚悹鍥у级瀹撳秴顪冮妶鍡樺鞍缂佸鍨剁粋宥夋倷椤掍礁寮垮┑鈽嗗灣閸樠勭妤e啯鍊垫慨妯煎亾鐎氾拷

清单 2 仅演示了新的搜索方法。它需要两个请求参数:tag 和 category。它能够分别或同时处理这两个参数。像 Grails 应用程序中的所有请求参数一样,这两个参数是通过 params 对象公开的。如果存在 tag 参数,那么将在搜索服务中调用 searchTag 方法。如果存在 category 参数,那么将在搜索服务中调用 listCategory 方法。如果两个参数都具备的话(比如 params.tag 和 params.category),那么将变得很有趣。
我们只希望显示调用搜索服务时返回的两个新闻列表中共有的新闻。所以首先要使用 [:] 符号创建一个空映射。这是一个来自 Java 的 HashMap。然后循环遍历列表获得带有特定标记的新闻,并以每条新闻的 ID 为键将它们放入映射中。对每个闭包使用标准的 Groovy 语法。然后您就可以在分类搜索中看到所有其 ID 出现在您创建的映射中的新闻。使用 Groovy 添加到列表的便捷的 findAll 方法,并且再次使用闭包。这次将对闭包使用 Groovy 的简化符号(‘it’ 对象)。最后,不管结果如何,来自 Grails 的 JSON 转换器会将该列表转换成一个 JSON 对象。
在上一篇文章中,您看到了通过 Grails 将数据呈现为 XML 有多么容易。同样,Grails 也可以很方便地将数据呈现为 JSON。现在,您可以测试新的 Web 服务。根据 Grails 约定,已知 Web 服务的 URL 为 http://<root>/digg/api/search。现在给出一个示例输出,这是搜索类别为 “technology” 的内容得到的结果,如清单 3 所示。
清单 3. 示例搜索输出[{"id":1,"class":"Story","category":"technology","description":"How to get
a ternary operator in Scala","link":"http://blog.tmorris.net/does-scala-have-
javas-ternary-operator/","tags":"programming scala","title":"Does Scala have
Java's ternary operator?","votesAgainst":0,"votesFor":0},{"id":3,"class":"Story",
"category":"technology","description":"New animations available in the Flex 4 'Gumbo'
release.","link":"http://graphics-geek.blogspot.com/2008/10/flex-specificanimations
-posted.html","tags":"flash flex","title":"Flex Specific Animations Posted",
"votesAgainst":0,"votesFor":0}]
更多精彩
赞助商链接