11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

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

2007-09-16 10:49541
用户头像

发布了 225 篇内容, 共 55.3 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

数字经济跨越五个融合发展阶段,区块链正成为基础支撑结构

CECBC

数字经济

《Python深度学习》第二版重磅来袭——(Keras之父亲自编写)

计算机与AI

CloudIDE插件开发实战:教你如何调试代码

华为云开发者联盟

ide 开发 Cloud

云原生架构:容器资源限制及资源可见性

云原生实验室

云原生

Windows下MySQL无法启动万能解决方案

MySQL从删库到跑路

MySQL

理解Python协程的本质

Justfly

Python 协程 异步 Async 异步编程

深度学习在物理层信号处理中的应用研究

华为云开发者联盟

学习 模型 物理层

揭秘 VMAF 视频质量评测标准

阿里云视频云

视频 图像处理

WebRTC SDP 详解和剖析

阿里云视频云

阿里云 音视频 WebRTC 视频云 流媒体传输

王者级别的Java多线程技术笔记,我愿奉你为地表最强!

Java架构师迁哥

工商银行基于 Dubbo 构建金融微服务架构的实践-服务发现篇

阿里巴巴云原生

云原生 dubbo 中间件 案例分享 CloudNative

Linux角度仰视Goroutine的GMP

ninetyhe

Java Linux 多线程与高并发 Go 语言

构师训练营 - 第七周学习总结

joshuamai

国家计算机网络与信息安全管理中心官员:数字货币的风险仍需关注

CECBC

信息安全

百篇已过,又是一个新篇章,谈谈感受吧

良知犹存

代码人生

谷燕西:不需要银行的银行业务

CECBC

移动互联网

Newbe.ObjectVisitor 0.4.4 发布,模型验证器上线

newbe36524

.net core ASP.NET Core dotnet

甲方日常 64

句子

工作 随笔杂谈 日常

多活/多机房的几种实现方式与重点

Justfly

高可用 跨机房 数据同步 异地多活容灾

《Web自动化》基础知识脑图

清菡软件测试

Web

前端开发还可以这么玩?元数据实践分享

华为云开发者联盟

大前端 元数据 组件 ROMA 业务流

告别“效率内卷化”,华为用一年时间让职场人支棱起来

脑极体

基于有限状态机与消息队列的三方支付系统补单实践

Java架构师迁哥

流动性挖矿系统APP开发|流动性挖矿软件开发

系统开发

mongodb 源码实现系列 - command 命令处理模块源码实现二

杨亚洲(专注MongoDB及高性能中间件)

MySQL mongodb 分布式数据库 源码刨析 分布式数据库mongodb

S型曲线不止关乎身材?|技术人应知的创新思维模型(2)

Alan

创新 思维模型

构师训练营 - 第七周课后练习

joshuamai

2. Spring早期类型转换,基于PropertyEditor实现

YourBatman

Spring Framework 类型转换 PropertyEditor

Grails 0.6汇集Spring与JBoss的精华_Java_Shane Witbeck_InfoQ精选文章