当前位置: 首页 > 知识库问答 >
问题:

如何配置spring和vaadin以将我自己的bean注入vaadin视图?

东方和惬
2023-03-14
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<bean class="ru.yudnikov.blog.backend.PostManager" id="postManager"/>
<bean class="ru.yudnikov.blog.backend.PostModel" id="postModel" scope="prototype"/>
</beans> 

我声明了实现ApplicationContextAware的ApplicationClass(将静态链接放置到我的上下文),但是当我调试方法setApplicationContext(ApplicationContext ApplicationContext)时,我看到ApplicationContext不是空的。它包含了vaadin bean的延迟,比如PostView,我想用“authwired注释”注入我的管理器(控制器)。但如果我将centext设置为xml文件中的新类路径上下文,我将失去视图防御。而且我找不到一种方法来将我的bean定义添加到现有上下文中。我尝试了setParent()setClassLoader()和refresh()但没有帮助。如何解决这个问题?我应该尝试“合并”这两个上下文还是怎样?

共有1个答案

璩华辉
2023-03-14

使用Vaadin Spring插件(https://github.com/Vaadin/Spring)。

下面是主UI类的示例(我在这里使用javax Inject,但您可以使用Spring Autowired注释):

@SpringUI
@Theme("new")
@Widgetset("com.example.NewWidgetSet")
public class NewUI extends UI implements Constants {
    private static final Logger logger = LoggerFactory.getLogger(NewUi.class);
    private CssLayout contentLayout;
    private SpringViewProvider viewProvider;

    @Inject
    public RessuUi(HeaderLayout headerLayout, SpringViewProvider viewProvider) {
        this.headerLayout = headerLayout;
        this.viewProvider = viewProvider;
    }

    @Override
    protected void init(VaadinRequest request) {
        initNavigator();
        initRootLayout(); // init here content
    }

    private void initNavigator() {
        Navigator newNavigator = new Navigator(this, contentLayout);
        newNavigator.addProvider(viewProvider);
        setNavigator(newNavigator);
    }

    @Override
    public void detach() {
        logger.debug("Detaching UI.");
    }

}

视图类示例:

@SpringView(name = UserFormView.NAME)
public class UserFormView extends VerticalLayout implements View {

    private MyService myService;

    @Autowired
    public UserFormView(MyService myService) {
        this.myService = myService;
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context-4.1.xsd">

    <context:component-scan base-package="com.mypackage.to.scan"/>
</beans>
@Configuration
@EnableVaadin
@ComponentScan
@PropertySource("classpath:application.properties")
public class MainConfiguration {

}
@Slf4j
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = true, ui = NewUi.class, widgetset = "fi.ssm.ressu.NewWidgetSet",
    heartbeatInterval = 60, closeIdleSessions = true)
public class NewServlet extends SpringVaadinServlet {

}
 类似资料:
  • 我正在开发受spring security保护的spring boot应用程序。以下是安全配置的一部分: 我将使用VAADIN实现一些管理仪表板来管理我的应用程序。我读到“在Spring或Vaadin中禁用CSRF保护。如果您都打开了,您的应用程序将无法工作。”。 在我的情况下,我需要禁用Vaadin中的CSRF保护,但我找不到如何使用Java配置来做到这一点。 此时此刻,我得到:https://

  • 在我的一个Vaadin视图中,我试图通过使用@Inject注入驻留在另一个项目(bll)中的业务对象来获取它。 瓦丁观点: 我不能这样做,当然,bananaService对象在运行时是空的,因为我没有地方对包进行组件扫描。 我正在使用注释,所以我没有web.xml在我的Vaadin Web项目中,我甚至没有WEB-INF文件夹。 我也知道有一些替代方案,比如CDI-Utils和Vaadin CDI

  • 我正在尝试使用几个s-vaadin、jsp等实现一个应用程序。 它使用简单的,但后来我决定使用vaadin作为ui。 我创建了vaadin servlet(Spring的servlet也留下了)。我的看起来像这样 我创建了vaadin组件并根据我的需要对其进行了调整。我使用自动装配进行服务。 也是一个Spring bean。 < code>ProjectRepository是另一个spring b

  • 我正在开发一个遗留的JSF应用程序,我们正在慢慢地将其移植到Spring MVC。我们正在使用Spring Security来控制登录信息。在用户登录之后,JSF页面全局地实例化一个在任何地方都使用的会话作用域bean。我想更改应用程序,这样我们就可以先进入用Spring MVC开发的页面。 我尝试的一种方法是将bean转换为spring bean,并将其注入JSF,但不幸的是,这需要对bean进

  • 我们有一个现有的Vaadin 8 JavaEE网络应用程序,它是根据门票仪表板演示进行改编和大量修改的。我们正在计划将应用迁移到使用Spring(非引导)的时间表,并在下一个版本中采用MVC模型。然而,在阅读了Vaadin Spring留档并比较了当前应用程序、示例面包店应用程序(Spring,带有框架8)和使用Hibernate 4和Spring 4的旧项目之间的源代码后,我们仍然有一些关键问题

  • 我一直在试用Vaadin 7。首先,我必须说明我对Vaadin是个安静的呆子,对JAVA Perstression不是很熟悉。因此,我试图学习bean验证以及如何使用它。我已经学习了几个教程,但是很难确定哪一个是Vaadin7的最新和正确的教程。尽管如此,我尝试下载并使用JPA容器和BeanValidator,但无法使其工作。下面是我正在使用的代码: 而且 classnotfound异常已消失,但