所以,我几天前开始使用grails,现在我遇到了问题:
class Activity {
String title
String description
String category
String tags
String priority
//<?> image <-
User owner
static hasMany = [tis: TimeInvested]
static constraints = {
title unique: true
category nullable: true, inList : ["Trabalho", "Lazer"]
tags nullable: true
description nullable: true
priority nullable: true, inList :["Alta", "Media", "Baixa"]
}
Double getInvestedHours(){
def soma = 0.0d
this.tis.each {
soma += it.hours
}
soma
}
String toString() {
title
}
}
正如您所看到的,我正在尝试创建一个具有某些属性的活动,这是一个图像,但我不知道该图像存储的类型。此外,我正试图从html页面获取其值,如下所示:
<form class="form-inline povmt-form" action="${createLink(controller: 'Activity', action: 'save')}" method="POST">
<div class="form-group">
<input type="hidden" name="owner.id" value="${session.user.id}">
<div class="input-group" style="width: 100%">
<div class="input-group-addon" style="width: 30%">Titulo</div>
<input type="text" name="title" class="form-control" placeholder="Titulo" required>
</div>
<div class="input-group" style="width: 100%">
<div class="input-group-addon" style="width: 30%">Descrição</div>
<input type="text" name="description" class="form-control" placeholder="Descrição">
</div>
<div class="input-group" style="width: 100%">
<div class="input-group-addon" style="width: 30%">Imagem</div>
<input type="file" name="image" class="form-control" accept="image/*" capture="camera">
</div>
<div class="input-group" style="width: 100%">
<div class="input-group-addon" style="width: 30%">Categoria</div>
<g:select name="category" class="form-control" from="${['Trabalho', 'Lazer']}"/>
<!-- <select name="" id=""></select> -->
</div>
<div class="input-group" style="width: 100%">
<div class="input-group-addon" style="width: 30%">Prioridade</div>
<g:select name="priority" class="form-control" from="${['Alta', 'Media', 'Baixa']}"/>
</div>
<div class="input-group" style="width: 100%; display: none">
<div class="input-group-addon" style="width: 30%">Tags</div>
<input type="text" name="tags" class="form-control" placeholder="Tags">
</div>
<input type="submit" class="btn btn-primary btn-lg" value="Adicionar atividade" style="width: 100%; margin-top: 40px;">
</div>
</form>
你们有没有想法如何从html页面中的表单中获取图像并保存到groovy变量中以创建新活动?我是网络开发的新手,所以欢迎任何帮助:)
P.S:英语不是我的母语,对任何错误都很抱歉。答案 0 :(得分:1)
我通常做的是将图像上传到单独的存储空间,例如Amazon S3。您可以使用域类来保存图像详细信息,如URL,密钥对象ID,名称等。然后在Activity类中引用您的图像对象。在约定的grails中,控制器应命名为ActivityController.groovy
。 Activity.groovy
通常是指域类。为了获得输入和验证它,你可以使用像ActivityCommand
这样的命令类,它可以在你的控制器类中。
// Activity.groovy (domain)
class Activity {
Image image
// ..
}
// Image.groovy (domain)
class Image {
// ...
String name
String objId
String url
// ..
}
您可以使用<g:uploadForm>
并拥有<input type="file" name="image">
。然后在您的控制器中获取如下图像:
// ActivityController.groovy
// ..
def save() {
def file = request.getFile('image') //MultipartFile (spring)
byte[] ba = file.getBytes()
// call S3 upload service ... which will return the Image object.
activityService.save(/*params which includes the image object*/)
}
// ActivityService.groovy
// ..
def saveActivity(Image img, /* .. */) {
Activity a = new Activity()
a.setImage(img)
// ..
a.save() // saves to DB
}