如果提交表单标记是uploadForm,为什么控制器中的更新方法不起作用

时间:2013-12-19 16:22:27

标签: grails

我创建了一个名为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根本没有调用更新方法(没有显示打印)。

你们知道为什么吗?

谢谢

1 个答案:

答案 0 :(得分:0)

感谢您的帮助

我将表单HTML更改为

<g:uploadForm action="update" method="POST" >

一切正常