2012-07-10 50 views
0

我无法从保存到数据库的用户获取文本输入和文件上传。在.gsp页面中有两种形式,一种是文本输入,另一种是文件上传。我能够保存文件或获得文本输入,但我不能这样做。当我将提交按钮放入文本字​​段输入的标签内时,它会保存这些内容,并且当我将它放在标签中时,它将保存该文件,但是如何通过点击一个提交按钮来完成它。我不想有多个提交按钮。这两个表单调用相同的方法来保存数据。在同一视图中上传文件和文本grails

本网站上的例子就是我寻找,但它并没有说的信息会如何与一个提交按钮的点击发送:

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

+1

您未接受我的答案接受自己的答案?即使我给了你整个解决方案,你所做的基本上是重申了我所说的有关表单标签之间的区别。恕我直言,这是非常糟糕的形式,并会让人停止帮助你。 – Kelly 2012-07-12 23:10:28

+0

哟放松,我想​​我可以选择多个答案,如果它让你感觉更好,我会选择你的答案对我无关 – Ameya 2012-07-12 23:38:33

+2

这是关于承认帮助你的人 - 哟。 – Kelly 2012-07-13 00:05:59

回答

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') 
0

提交按钮提交内容它包含的形式。你的问题的答案是:a)有1个表格和1个提交按钮,或b)每个有2个。

+0

那么他在这里只用一个提交按钮怎么做:http://www.ibm.com/developerworks/java/library/j-grails06099/index.html – Ameya 2012-07-10 19:20:59

+0

不幸的是,你的链接只是显示片段(因此<! - SNIP注释),但看起来上传标记位于1''标记内。 – OnResolve 2012-07-10 19:23:41

+0

是的,这是问题,我可以分别做每一件事,但一起做是他们没有显示,我需要什么。我试图将uploadForm标签放在常规窗体标签内,但这也不起作用 – Ameya 2012-07-10 19:29:18

0

它也可以,如果不是具有<g:form>你只让它作为一个<g:uploadForm>标签