深入理解Grails控制器与视图技术
发布时间: 2025-08-16 01:06:22 阅读量: 1 订阅数: 3 


Grails 2权威指南:从入门到精通
### 深入理解Grails控制器与视图技术
#### 1. 控制器测试与登录功能实现
在开发过程中,我们需要对登录功能进行测试。以下是登录失败和登录成功的测试用例代码:
```groovy
// 登录失败测试
params.login = 'maynard'
params.password = 'lateralus'
controller.login()
def cmd = model.loginCmd
assert cmd.hasErrors()
assert 'user.password.invalid' == cmd.errors['password'].code
assert session.user == null
assert '/store/index' == view
// 登录成功测试
void testLoginSuccess() {
request.method = 'POST'
def u = new User(login: 'maynard',
firstName: 'Maynard',
lastName: 'Keenan',
password: 'undertow').save()
assert u != null
params.login = 'maynard'
params.password = 'undertow'
controller.login()
assert session.user != null
assert '/store' == response.redirectedUrl
}
```
通过上述测试用例,我们可以确保登录功能在不同情况下的正确性。
#### 2. 视图技术概述
在Web应用开发中,视图技术至关重要。传统的JSP是一种广泛使用的视图技术,但它也存在一些问题,比如脚本代码和标记代码混合容易导致代码难以维护。而Groovy Server Pages (GSP) 作为Grails的视图技术,具有独特的优势:
- 充分利用Groovy的运行时环境和动态方法调度。
- 提供更强大的表达式语言,包括GPath表达式、Groovy bean表示法和可重写运算符。
- 支持正则表达式、GStrings以及简洁的地图和列表语法。
#### 3. GSP基础
GSP与JSP有很多相似之处,并且默认提供了一些对象,如下表所示:
| Attribute | Description |
| --- | --- |
| application | The ServletContext instance |
| flash | The flash object for working with flash scope |
| out | The response Writer instance |
| params | A map of request parameters |
| request | The HttpServletRequest instance |
| response | The HttpServletResponse instance |
| session | The HttpSession instance |
在GSP中,我们可以像在控制器中一样访问这些对象。
#### 4. 理解模型
在MVC模式中,将信息(模型)传递给视图进行渲染是一项基本操作。以下是一个在Grails中创建模型的示例:
```groovy
package com.gtunes
class StoreController {
def shop() {
def genreList =
new DetachedCriteria(Album).distinct('genre').list()
[genres:genreList.sort()]
}
}
```
在上述代码中,`shop` 方法返回一个包含 `genres` 键的映射,这个键值对会被放入GSP模型中,从而可以在视图中作为变量使用。
#### 5. 页面指令
GSP支持JSP页面指令的有限子集,其中比较有用的是 `contentType` 和 `import` 指令。
- `contentType` 指令:用于设置响应的内容类型,例如:
```jsp
<%@ page contentType="text/xml; charset=UTF-8" %>
``
```
0
0
相关推荐










