繁体   English   中英

Spring Boot,Vaadin - 无法在视图中自动装配服务

[英]Spring boot, Vaadin - cant autowire Service in a View

我有带有 vaadin 和 vaadin4spring 插件的 Spring Boot 应用程序。 在我的视图中,我想显示数据库中的数据。 我要显示的数据由服务类中的方法返回。

@Service
public class UserService {
    public List<Users> getUsers() ....
}

看法:

@SpringView(name = Views.USERLIST) //static constant containing string "users"
public class UserlistView extends HorizontalLayout implements View {
    @Autowired
    private UserService userService;
    @PostConstruct
    public void construct() {
        displaytable(userService.getUsers());
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent viewChangeEvent) {}

}

UI class:

@SpringUI
@Theme("valo")
public class TUI extends UI {
        @Autowired
        private SpringViewProvider springViewProvider;

        protected void init(VaadinRequest request) {
          ..
          Navigator navigator = new Navigator(this, content);
           navigator.addView(Views.USERLIST, UserlistView.class);
          navigator.addProvider(springViewProvider);

        }
}

在服务器启动期间 vaadin 识别 springview - “cvspring.navigator.SpringViewProvider : 1 SpringView found”,没有显示任何异常或警告。

每次我使用 navigator 显示视图( navigator.navigateTo("users") )时,视图中的自动装配字段都没有注入,也没有调用 postprocess 方法。 如果我不将视图添加到导航器对象中并使用 url 直接访问视图,那么更奇怪的是 - localhost:8080/#!users 字段将被正确注入并调用方法构造()。

如果有帮助,那就是我的配置类

@Configuration
@ComponentScan(basePackages = { "me.project" })
@EnableAutoConfiguration
@EnableVaadinEventBus
public class TheConfig {
    // contains only one bean definition - sessionfactory
}

有没有人遇到过类似的问题? 我无法在任何地方找到帮助,任何人都可以告诉我我做错了什么。 谢谢

当你做

navigator.addView(Views.USERLIST, UserlistView.class);

它创建一个StaticViewProvider Spring 处理的StaticViewProvider并使用“new”创建一个视图。 因此,'addView' 不会发生 spring 自动装配如果您使用 springViewProvider 自动装配由 Spring 处理。

所以不要做navigator.addView() ,而是在使用 Spring+Vaadin 时依赖springViewProvider

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM