我创建了一个名为Test
的非常简单的域类,它只有一个字段:name
,我运行grails generate-all Test
来创建控制器和视图。控制器中的更新方法是:
@Transactional
def update(Test testInstance) {
println("do you go inside?")
if (testInstance == null) {
notFound()
return
}
if (testInstance.hasErrors()) {
respond testInstance.errors, view:'edit'
return
}
testInstance.save flush:true
def uploadedFile = request.getFile('myFile')
if (!uploadedFile.empty){
println "Class: ${uploadedFile.class}"
println "Name: ${uploadedFile.name}"
println "OriginalFileName: ${uploadedFile.originalFilename}"
println "Size: ${uploadedFile.size}"
println "ContentType: ${uploadedFile.contentType}"
}
request.withFormat {
multipartForm {
flash.message = message(code: 'default.updated.message', args: [message(code: 'Test.label', default: 'Test'), testInstance.id])
redirect testInstance
}
'*'{ respond testInstance, [status: OK] }
}
}
edit.gsp
<%@ page import="Test" %>
<g:uploadForm url="[resource:testInstance, action:'update']" method="PUT" >
<g:hiddenField name="version" value="${testInstance?.version}" />
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />
</fieldset>
</g:uploadForm>
_form.gsp
<%@ page import="Test" %>
<div class="fieldcontain ${hasErrors(bean: testInstance, field: 'name', 'error')} ">
<label for="name">
<g:message code="test.name.label" default="Name" />
</label>
<g:textField name="name" value="${testInstance?.name}"/>
<br>
<input type="file" name="myFile" />
</div>
更新方法不起作用。实际上,Grails根本没有调用更新方法(没有显示打印)。
你们知道为什么吗?
谢谢
答案 0 :(得分:0)
感谢您的帮助
我将表单HTML更改为
<g:uploadForm action="update" method="POST" >
一切正常