编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Grails指南28Web层控制器高阶

wxchong 2024-06-24 20:03:46 开源技术 12 ℃ 0 评论

上传文件,Grails使用Spring's MultipartHttpServletRequest接口实现上传。文件上传的第一步是创建multipart form,具体代码如下:

Upload Form: <br />

<g:uploadForm action="upload">

<input type="file" name="myFile" />

<input type="submit" />

</g:uploadForm>

与普通<g:form> 相比,uploadForm 增加了enctype="multipart/form-data"属性。处理上传请求的方法如下:

def upload() {

def f = request.getFile('myFile')

if (f.empty) {

flash.message = 'file cannot be empty'

render(view: 'uploadForm')

return

}

f.transferTo(new File('/some/local/dir/myfile.txt'))

response.sendError(200, 'Done')

}

在模型进行数据绑定的过程中,也可对上传文件的大小进行限制,具体方式如下:

class Image {

byte[] myFile

static constraints = {

// Limit upload file size to 2MB

myFile maxSize: 1024 * 1024 * 2

}

}

你也可以这样去写:

def img = new Image(params) //params.myFile,会自动进行格式转化并进行绑定

设置size或maxSize是很必要的,因为默认情况下数据类型将是blob,即最大仅支持255字节

当然,也可以将数据类型转化为String类型,这可以可以的

################

默认情况下,所有字段的约束都是nullable: false的,如果想改成nullable: true的话,可使用以下方法:

class AuthorSearchCommand implements grails.validation.Validateable {

String name

Integer age

static boolean defaultNullable() {

true

}

}

################

处理重复的变大提交(同步令牌模式),在页面的form中加入useToken="true":

<g:form useToken="true" ...>

在控制器Controller的方法Action中加入:

withForm {

// good request

}.invalidToken {

// bad request

}

#################

格式转换与附加默认值的格式转换:

def total = params.int('total') //boolean, long, char, short....

def total = params.int('total', 42) //total存在则进行转换,不存在则返回42

参数数组的处理:

for (name in params.list('name')) {

println name

}

##################

错误处理实现:

// grails-app/controllers/lvchanglong/DemoController.groovy

package lvchanglong

class DemoController {

def someAction() {

// do some work

}

def handleSQLException(SQLException e) {

render 'A SQLException Was Handled'

}

def handleBatchUpdateException(BatchUpdateException e) {

redirect controller: 'logging', action: 'batchProblem'

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表