我正在实现带有输入字段和文件上传的简单表单。 我去了教程:http://grails.org/Simple+Avatar+Uploader 和文档:http://grails.org/doc/2.0.x/guide/theWebLayer.html#uploadingFiles
然而,文件上传似乎不起作用! 为什么不起作用?该问题的解决方案是什么?
问题:
没有方法签名: org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 适用于参数类型:(java.lang.String)值: [itemImage]可能的解决方案:getXML(),getPart(java.lang.String), getAt(java.lang.String),getAt(java.lang.String),getLocale(), 的getJSON()。 Stacktrace如下:消息:没有方法签名: org.springframework.security.web.servletapi.HttpServlet3RequestFactory $ Servlet3SecurityContextHolderAwareRequestWrapper.getFile() 适用于参数类型:(java.lang.String)值: [itemImage]可能的解决方案:getXML(),getPart(java.lang.String), getAt(java.lang.String),getAt(java.lang.String),getLocale(), getJSON()Line |方法 - >> 14 |保存在greatoffer.SellController $$ EOVmPG4d - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 195 | grails.plugin.cache.web.filter.PageFragmentCachingFilter中的doFilter 63 | grails.plugin.cache.web.filter.AbstractFilter中的doFilter 53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter | 49 | doFilter in grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter | 82 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter | 895 | java.util.concurrent.ThreadPoolExecutor $ Worker |中的runTask 918 |在''^ 662 |中运行跑 。 。在java.lang.Thread
中
主要GSP:
<g:uploadForm action="save" method="POST">
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:uploadForm>
图片上传表单GSP的一部分:
<label for="images">
<g:message code="item.images.label" default="Images" />
</label>
<input type="file" name="itemImage" />
控制器:
import grails.plugin.springsecurity.annotation.Secured
@Secured('permitAll')
class SellController {
def index() {
render(view: "seller")
}
def save() {
println "Here are params: ${params}";
def f = request.getFile('itemImage')
flash.message = message(code: 'default.created.message', args: [message(code: 'item.label', default: 'Item'), params.id])
render(view: "seller")
}
}
答案 0 :(得分:5)
通过堆栈跟踪中的类型,Spring Security @Secured注释将您的请求包装在SecurityContextHolderAwareRequestWrapper中。你需要到MultipartHttpServletRequest来调用我相信的getFile。
另外,在你的调试中这是params语句,你看到了itemImage吗?如果是这样,我实际上认为这可能很容易。
def file = params.itemImage
更新:我赞成评论。我开始打字时,他们不在场。