以相同的视图grails上传文件和文本

时间:2012-07-10 19:15:07

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

我无法从用户那里获取文本输入和文件上传,我保存到数据库中。我在.gsp页面中有两个表单,一个用于文本输入,另一个用于文件上载。我能够保存文件或获取文本输入,但我不能两者兼而有之。当我将提交按钮放在文本字段输入的标签内时,它会保存这些按钮,当我将它放在标签中时会保存文件,但是如何通过单击一个提交按钮来实现它们。我不想有多个提交按钮。这两种形式调用相同的方法来保存数据。

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

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

3 个答案:

答案 0 :(得分:2)

所有<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')

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果不是<g:form>而是将其设为<g:uploadForm>标记

,它也会有效