我有一个非常简单的Vaadin应用程序。我想使用Guice注入我的Vaadin应用程序的主窗口。Vaadin Window组件未完全注入Guice
我的问题是我的主窗口被注入,但是我的@Inject指令在这个主窗口组件中没有被处理。
我使用CAS的完整代码源可以用a bitbucket repo
的Vaadin应用程序类:
public class MyVaadinApplication extends Application {
protected final Provider<MainWindow> mainWindowProvider;
@Inject
@Named("title")
protected String title;
@Inject
public MyVaadinApplication(Provider<MainWindow> mainWindowProvider) {
this.mainWindowProvider = mainWindowProvider;
}
@Override
public void init() {
System.out.println("MyVaadinApplication:: found value <"+title+"> for injected title");
setMainWindow(this.mainWindowProvider.get());
}
}
的主窗口类:
public class MainWindow extends Window {
@Inject
@Named("title")
protected String title;
@Inject
@Named("label")
protected String label;
private static int globalCounter = 0;
private int localCounter;
public MainWindow(String caption, ComponentContainer content) {
super(caption, content);
initUI();
}
public MainWindow(String caption) {
super(caption);
initUI();
}
public MainWindow() {
super();
initUI();
}
private void initUI() {
localCounter = globalCounter;
globalCounter++;
this.setCaption(title);
this.addComponent(new Button(label+" ("+localCounter+")"));
}
}
的GuiceServletContextListener,其中吉斯结合的定义:
public class GuicyServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
ServletModule module = new ServletModule() {
@Override
protected void configureServlets() {
serve("/*").with(GuiceApplicationServlet.class);
bind(Application.class).to(MyVaadinApplication.class).in(ServletScopes.SESSION);
bind(MainWindow.class).in(ServletScopes.SESSION);
bindConstant().annotatedWith(Names.named("title")).to("This is a guicy Vaadin Application");
bindConstant().annotatedWith(Names.named("label")).to("Guice me!");
}
};
Injector injector = Guice.createInjector(module);
return injector;
}
}
什么情况是,在主窗口被正确注射,但标签和标题字符串总是空。任何想法?
虽然我的用例只显示了字符串(和bindConstant())的问题,但它发生在我尝试在MainWindow组件中注入的任何东西。 –