使用常规

时间:2016-12-08 17:05:42

标签: html grails

所以,我几天前开始使用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:英语不是我的母语,对任何错误都很抱歉。

1 个答案:

答案 0 :(得分:1)

我通常做的是将图像上传到单独的存储空间,例如Amazon S3。您可以使用域类来保存图像详细信息,如URL,密钥对象ID,名称等。然后在Activity类中引用您的图像对象。在约定的grails中,控制器应命名为ActivityController.groovyActivity.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
}