Grails 0.6 汇集 Spring 与 JBoss 的精华

  • 2007-09-16
  • 本文字数:981 字

    阅读完需:约 3 分钟

Graeme Rocher 宣布 Grails 的最新版本将会进一步摆脱原先的 Rails 模仿者的角色。虽然这次发布仅仅让 Grails 的版本号进步到了 0.6,但从开发者所做的大量工作来看,这个版本号显然是太谦虚了。以下是完整的特性列表:

  • 合并 Groovy/Java 编译
  • 集成 Spring Web Flow
  • 支持 Spring 的作用域(scope)以实现限定作用域的服务
  • 改善了对 REST 的支持,实现了自动化的 XML/JSON marshalling 和 RESTful URL 映射
  • 为不能被惯例所代替的配置准备了新的 Config DSL
  • 更漂亮的自动生成界面
  • 支持内嵌使用 Sitemesh decorator
  • 控制器现在可以把标签库当作方法来使用
  • 新的 GSP 标签
  • 大幅度改进启动、单元测试和生成工具的速度

集成 Spring Web Flow

Rod Johnson 提出了通过代码来定义 Spring 管理下的 bean 的新途径,取代传统的 XML 标记的形式。与此类似,Graeme 用 Groovy 来定义 Spring Web Flow:

showCart {
<br></br>
   on("checkout").to "enterPersonalDetails"
<br></br>
   on("continueShopping").to "showCatalogue"
<br></br>
}                                         
<br></br>
enterPersonalDetails {
<br></br>
 on("submit") {
<br></br>
  def p = new Person(params)
<br></br>
  flow.person = p 
<br></br>
  def e = yes()
<br></br>
  if(p.hasErrors() || !p.validate())return error()    
<br></br>
 }.to "enterShipping"   
<br></br>
 on("return").to "showCart"
<br></br>
 on(Exception).to "handleError"
<br></br>
}              
<br></br>
enterShipping  {
<br></br>
 on("back").to "enterPersonalDetails"
<br></br>
 on("submit") {
<br></br>
  def a = new Address(params)                           
<br></br>
  flow.address = a
<br></br>
  if(a.hasErrors() || !a.validate()) return error()    
<br></br>
 }.to "enterPayment"
<br></br>
}
<br></br>

上面的代码片断展示了如何定义一个工作单元或 JBoss Seam 框架所说的“会话”。就跟 Seam 中一样,“流”里包含了会话性的状态信息。

自动化的 XML/JSON marshalling 和 RESTful URL 映射

以前的版本用插件来实现转换,而在这一版里:

import grails.converters.*
<br></br>
...
<p>
def list = {
</p><br></br>
   render Book.list() as XML
<br></br>
   // or render Book.list() as JSON
<br></br>
}
<br></br>

查看英文原文: Grails 0.6 Adds Best of Breed Mix From Spring and JBoss