绑定到线程的键没有值(Grails)

时间:2014-06-02 21:39:34

标签: hibernate grails service

我正在使用Grails开发Web应用程序。我的环境规格是:

  • Groovy Grails工具套件(GGTS)3.6.0.M1-e4.4-win32-x86_64
  • Hibernate 4.3.5.3
  • Groovy 2.3
  • Grails 2.4.0
  • Windows 8.1 Pro N

我启动应用程序,在grails启动页面上我选择了这个控制器:

class UploadController {

    def index() { }

    def upload() {
    forward(controller: "parser", action: "takeUploadedFiles")
    }
}

只有这个控制器就不会发生任何事情。相应的.gsp是此上传表单。我用它一次上传多个文件。

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<meta name="layout" content="main"/>
<title>Inhalte einlesen</title>
</head>
<body>
  <div class="body">
    <g:uploadForm controller="upload" action="upload" autocomplete="off"> 
    <label for="files">Bitte alle HTML-Dateien einer Kategorie ausw&auml;hlen:</label>
    <input type="file" id="files" name="files" multiple="multiple" />
    <input type="hidden" id="MAX_FILE_SIZE" name="MAX_FILE_SIZE" value="30000" />
    <g:submitButton name="add" class="save button medium" value="Hochladen" />
</g:uploadForm>
  </div>
</body>
</html>

UploadController转发到ParserController。这是ParserController:

import org.springframework.web.multipart.commons.CommonsMultipartFile

class ParserController {
    def multipartToFileService
    def parserService

    def index() { }

    def takeUploadedFiles() {
       List fileList = request.getFiles('files') // 'files' is the name of the input
       fileList.each { file -> multipartToFileService.convert(file) }

       redirect(action: "parse")
    }

    def parse() {
        parserService.parse()
    }
}

所以我上传了一个.html。 此时我得到了这个例外:

2014-06-02 23:04:33,127 [tomcat-http--9] ERROR servlet.GrailsDispatcherServlet  - HandlerInterceptor.afterCompletion threw exception
java.lang.IllegalStateException: No value for key [org.hibernate.internal.SessionFactoryImpl@6398813a] bound to thread [tomcat-http--9]
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

此异常不会停止应用程序,即使解析完成也是如此。 但我不明白这个例外,我发现它可能有一些事情要做 使用事务服务我注入PaserController。 没有服务注入,我没有得到异常(当然我得到一个MissingPropertyException):

import org.springframework.web.multipart.commons.CommonsMultipartFile

class ParserController {
//  def multipartToFileService
//  def parserService

    def index() { }

    def takeUploadedFiles() {
    List fileList = request.getFiles('files') // 'files' is the name of the input
        fileList.each { file -> multipartToFileService.convert(file) }

        redirect(action: "parse")
    }

    def parse() {
        parserService.parse()
    }
}

任何想法如何避免这种IllegalStateException?

1 个答案:

答案 0 :(得分:0)

这似乎是问题所在:https://github.com/grails/grails-core/issues/2105

  • ID:GRAILS-11481
  • 描述:使用forward()和render()
  • 时,GrailsDispatcherServlet抛出IllegalStateException