1

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

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

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

4

3 回答 3

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

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

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

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

//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')
于 2012-07-10T19:44:28.547 回答
0

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

于 2012-07-10T19:19:19.310 回答
0

如果<g:form>您不将其<g:uploadForm>设为标签,它也可以使用

于 2012-07-10T23:26:31.997 回答