Scala 如何将变量从VaadinServlet传递到UI?

Scala 如何将变量从VaadinServlet传递到UI?,scala,dependency-injection,vaadin,guice,Scala,Dependency Injection,Vaadin,Guice,我是瓦丁的新手。我想用它来建立管理后端。由于我熟悉DI(Guice),我想将依赖项注入servlet。然而,我不知道如何从servlet传递到UI层。下面是我的示例代码: @Singleton @VaadinServletConfiguration(productionMode = false, ui = classOf[LoginUI]) class TestServlet @Inject()(userDAO: UserDAO) extends VaadinServlet with LazyL

我是瓦丁的新手。我想用它来建立管理后端。由于我熟悉DI(Guice),我想将依赖项注入servlet。然而,我不知道如何从servlet传递到UI层。下面是我的示例代码:

@Singleton
@VaadinServletConfiguration(productionMode = false, ui = classOf[LoginUI])
class TestServlet @Inject()(userDAO: UserDAO) extends VaadinServlet with LazyLogging {
  //How to userDAO to LoginUI?
  override def servletInitialized(): Unit = {
  }
}

@Theme("valo")
class LoginUI extends UI with LazyLogging {

  override def init(request: VaadinRequest) = {
    logger.debug("Init Login UI")
    val content: VerticalLayout = new VerticalLayout
    setContent(content)

    val label: Label = new Label("Hello, world!")
    content addComponent label

    content addComponent new Button("Click Me!",
      new ClickListener {
        override def buttonClick(event: ClickEvent) =
          Notification.show("The time is ")
      })
  }
}

我看到,虽然它是UI,但它的行为类似于控制器层,所以我认为这样做时它不会反模式。我发现将东西注入UI更加困难。然而,如果我可以直接注入到UI中,它会更好。

您到底想实现什么?通常,您会创建一个登录表单,并将其显示在LoginUI类的模式窗口中。您可以注入到UI中,但必须使用@CDIUI注释,如果您必须重载servlet,则必须从VaadicDiservlet继承。@Jonmartinsolas使用guice,而不是cdi@Jan啊,那是另外一回事。仍然-为了让Vaadin与DI一起工作,无论是CDI还是Spring,重写股票VaadinServlet都会带来麻烦。这也可能是问题所在吗?编辑:不,看来应该行得通,裁判。@Jonna,我已经快速浏览了一下博客。我想我可能漏掉了一点。根据博客的源代码,我仍然不知道如何注入UI。看起来博客引导我将其注入servlet,这对我来说不是问题。我想要的是能够在LoginUI类中注入userDAO。注入UI将是正常的用例,至少在CDI或Spring中是这样。Guice似乎没有得到很好的支持,或者至少它的设置更复杂。我发现了这个框架:(这里还有一个博客:)