我无法从用户那里获取文本输入和文件上传,我保存到数据库中。我在.gsp页面中有两个表单,一个用于文本输入,另一个用于文件上载。我能够保存文件或获取文本输入,但我不能两者兼而有之。当我将提交按钮放在文本字段输入的标签内时,它会保存这些按钮,当我将它放在标签中时会保存文件,但是如何通过单击一个提交按钮来实现它们。我不想有多个提交按钮。这两种形式调用相同的方法来保存数据。
此网站上的示例是我正在寻找的,但它没有说明如何通过单击提交按钮发送信息:
http://www.ibm.com/developerworks/java/library/j-grails06099/index.html
答案 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>
标记