【问题标题】:upload file and text in same view grails在同一视图 grails 中上传文件和文本
【发布时间】:2014-03-08 13:18:34
【问题描述】:

我无法从用户那里获取文本输入和文件上传,我将这两个文件都保存到数据库中。我在 .gsp 页面中有两种形式,一种用于文本输入,另一种用于文件上传。我可以保存文件或获取文本输入,但我不能两者都做。当我将提交按钮放在文本字段输入的标签内时,它会保存这些,当我将它放在标签中时,它会保存文件,但是我怎样才能通过单击单个提交按钮来完成这两个操作。我不想有多个提交按钮。这两个表单调用相同的方法来保存数据。

这个网站上的示例是我正在寻找的,但它没有说明如何通过单击单个提交按钮发送信息:

http://www.ibm.com/developerworks/java/library/j-grails06099/index.html

【问题讨论】:

  • 你不接受我对接受你自己的回答吗?即使我给了你整个解决方案,而你所做的只是重申我所说的关于表单标签之间的区别。恕我直言,这是非常糟糕的形式,会让人们停止帮助你。
  • 你放松,我想​​我可以选择多个答案,如果它让你感觉更好,我会选择你的答案,这对我没关系
  • 这是关于感谢帮助你的人 - 哟。

标签: forms grails file-upload submit form-submit


【解决方案1】:

<g:uploadForm...> 标签所做的只是将表单 enctype 设置为 multipart/form-data。要上传标准文本输入和文件,我通常只需执行以下操作:

//GSP
<g:form method="post" enctype="multipart/form-data"  action="update">
   <input type="text" name="myTextField" id="myTextField" />    
   <input type="file" id="myFile" name="myFile" />
   <g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
</g:form> //closing tag fixed

那么您在控制器中执行的操作取决于您保存上传文件的方式。如果您将其保存到 byte [] myFile 中,如果字段名称设置正确,它将自动绑定,因此您无需执行任何操作 - 它可以正常工作。

//controller
myInstance.properties = params  //binds text as well as upload files

如果您将其保存到文件系统,您可以执行以下操作(直接来自manual):

//Controller
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')

【讨论】:

    【解决方案2】:

    提交按钮提交包含在其中的表单的内容。您的问题的答案是:a) 有 1 个表单和 1 个提交按钮,或 b) 各有 2 个。

    【讨论】:

    【解决方案3】:

    如果您不使用&lt;g:form&gt; 而是将其设置为&lt;g:uploadForm&gt; 标签,它也可以工作

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多