1

为了让 GWT RequestFactory 与 Grails 一起运行,我使用以下方法:

class GwtController extends RequestFactoryServlet {

    public GwtController() {
        super()
    }

    def index = {
        doPost request, response
    }

    @Override
    public ServletContext getServletContext() {
        return ServletContextHolder.servletContext
    }

    @Override
    public ServletConfig getServletConfig() {
        return new DummyServletConfig(getServletContext(),"grails");
    }
}

其中 DummyServletConfig 是一个简单的实现ServletConfig

这在将应用程序部署到 tomcat 时有效。但是,使用测试或开发模式,它不是。我被要求调整 GWT Servlet 以防止它使用错误的类加载器:

在第 46 行我改变了

private static final RequestFactoryInterfaceValidator validator =
  new RequestFactoryInterfaceValidator(log,
      new RequestFactoryInterfaceValidator.ClassLoaderLoader(
          ServiceLayer.class.getClassLoader()));

private static final RequestFactoryInterfaceValidator validator = new RequestFactoryInterfaceValidator(
  log, new RequestFactoryInterfaceValidator.ClassLoaderLoader(
      Thread.currentThread()
                        .getContextClassLoader()));

否则,它不会找到我的 Domain 类(它们显然不在 GrailsRootLoader 中,而是在 Thread 的类加载器中)。

现在我想将我的 GWT servlet 恢复为 Google 发布的官方二进制文件,我想知道如何在 Grails 中修复不正确的 ClassLoader 或在不更改 GWT 源的情况下使 RequestFactoryServlet 正常工作。

4

1 回答 1

2

我希望 GWT 2.3 能解决你的问题:

http://code.google.com/p/google-web-toolkit/issues/detail?id=6092

于 2011-04-18T10:18:11.573 回答