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

如何正确地将Vaadin与Spring框架集成?

高经艺
2023-03-14

我在将Vaadin与Spring应用程序集成时遇到一些问题。我的所有bean都在“rootcontext.xml”文件中。我可以通过实例化“rootcontext.xml”然后为我的一个服务类调用bean来调用bean。

我可以这样填充表,但这是调用服务类的正确方法吗?因为我有更多的表必须称之为这个。

public final class TestTable extends Table {

private ApplicationContext applicationContext = (ApplicationContext) VaadinServlet.getCurrent().getServletContext()
        .getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

private Service service = this.applicationContext.getBean("service",
        Service.class);

public TestTable() {
    service.findAll()
}

这是我的UI类:

@SpringUI
@Theme("dashboard")
@Widgetset("vaadin.DashboardWidgetSet")
public class TestUI extends UI {

/**
 * 
 */
private static final long serialVersionUID = -620721219079395670L;

private final DashboardEventBus dashboardEventbus = new DashboardEventBus();

@Override
protected void init(VaadinRequest request) {

    setLocale(Locale.US);

    DashboardEventBus.register(this);
    Responsive.makeResponsive(this);
    addStyleName(ValoTheme.UI_WITH_MENU);

    updateContent();

    // Some views need to be aware of browser resize events so a
    // BrowserResizeEvent gets fired to the event bus on every occasion.
    Page.getCurrent().addBrowserWindowResizeListener(new BrowserWindowResizeListener() {
        @Override
        public void browserWindowResized(final BrowserWindowResizeEvent event) {
            DashboardEventBus.post(new BrowserResizeEvent());
        }
    });
}

private void updateContent() {
    setContent(new MainView());
}

@WebServlet(urlPatterns = { "/TestUI/*", "/VAADIN/*" }, name = "TestUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = TestUI.class, productionMode = false)
public static class TestUIServlet extends VaadinServlet {

}
}

我的根上下文。xml文件位于目录/WEB-INF/spring/root上下文中。xml。

应用程序上下文。Vaadin servlet的xml位于目录/WEB-INF/spring/Vaadin/applicationContext中。xml。

这是我的网站。xml。Vaadin Spring教程说使用上下文加载器初始化“applicationContext”。xml’。我可以将其路径添加到contextConfigLocation参数,但应该只有一个根上下文。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
</web-app>

瓦丁配置等级:

import org.springframework.context.annotation.Configuration;

import com.vaadin.spring.annotation.EnableVaadin;

@Configuration
@EnableVaadin
public class VaadinConfiguration {

@Autowired
private Service service;

@Bean
public UI ui() {
    System.out.println(service.findAll().size());

    TestUI testUI = new TestUI();

    testUI.setService(service);

    return testUI;
}
}

共有1个答案

闻华容
2023-03-14

我意识到的一个问题是,我对Vaadin Spring使用了错误的版本。我使用的是Vaadin Spring 2.0,但它不适用于Vaadin 7。所以我把它改成了1.2。

    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-spring</artifactId>
        <version>1.2.0</version>
    </dependency>

我将SpringVaadinServlet配置移到了我的web上。xml

<servlet>
    <servlet-name>UIServlet</servlet-name>
    <servlet-class>com.vaadin.spring.server.SpringVaadinServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>UIServlet</servlet-name>
    <url-pattern>/UI/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>UIServlet</servlet-name>
    <url-pattern>/VAADIN/*</url-pattern>
</servlet-mapping>

我还必须向配置类和UI类添加一些Vaadin Spring注释。

@Configuration
@EnableVaadin
@EnableVaadinNavigation
public class VaadinConfiguration {

}

@启用Spring视图的导航需要EnableVaadinNavigation。

@SpringUI
@Theme("dashboard")
public class UI extends UI {

@Autowired
private SpringViewProvider viewProvider;

private final HorizontalLayout root = new HorizontalLayout();
private ComponentContainer content;
private Navigator navigator;

@Override
protected void init(VaadinRequest request) {

    setLocale(Locale.US);

    Responsive.makeResponsive(this);
    addStyleName(ValoTheme.UI_WITH_MENU);

    root.setSizeFull();
    root.addStyleName("mainview");
    setContent(root);

    root.addComponent(new DashboardMenu());

    content = new CssLayout();
    content.addStyleName("view-content");
    content.setSizeFull();
    root.addComponent(content);
    root.setExpandRatio(content, 1.0f);

    navigator = new Navigator(this, content);
    navigator.addProvider(viewProvider);
    navigator.navigateTo(DashboardView.NAME);
}
}

我在UI中自动连接了SpringViewProvider,这也是识别用SpringView注释的类所必需的。

可在此处找到所有配置:

https://vaadin.com/wiki/-/wiki/SpringVaadin/I-开始使用VaadinSpring和Spring靴

 类似资料:
  • 问题内容: 我正在使用最新的稳定Spring版本()。 将Hibernate从5.1升级到5.2,并将依赖项更改为适当的hibernate文档后:https : //github.com/hibernate/hibernate- orm/wiki/Migration-Guide—5.2 我没有收到任何编译错误,但是我的所有测试都因以下堆栈跟踪而失败: 问题答案: 中增加了支持,其稳定版本将于下周推

  • 问题更新如下问题下的备注。 当我试图与Activiti框架一起运行spring-boot2项目时,我收到的问题描述得稍微低一些。 首先,这个项目是使用Spring初始值设定项创建的,所有进一步的开发都是使用本教程完成的-如何使用Spring Boot启动Activiti Spring JPA。 本教程描述了如何与Spring-boot 1. x一起使用它。在这个条件下(sping-boot-1.

  • 我试图将与(https://vaadin.com/wiki/-/wiki/main/vaadin+spring)集成。 我的应用程序类只是启动Spring应用程序 https://gist.github.com/anonymous/C047030C61B90C02D1EF pom.xml包含依赖项 当我输入localhost:8080时,它会将我重定向到Spring Security提供的登录ur

  • 问题内容: 我想制作一个桌面应用程序来浏览一个网站,我不想制作一个浏览器,而是一个浏览器嵌入的应用程序。我尝试过,但是发现了一些问题,例如缺少对插件的支持(例如:Flash,pdf查看器等)。 经过大量搜索后,我发现了Chromium嵌入式框架(CEF)或JCEF Java包装器,但我不知道如何在Java中使用它。 是否可以在Java应用程序中嵌入CEF / JCEF? 问题答案: 是否可以在Ja

  • 问题内容: 我已经开发了一个Spring / JPA应用程序: 服务,存储库和域层即将完成 。 该 所缺的只是层是网络层 。我正在考虑将Playframework 2.0用于Web层,但不确定是否可以 在Playframework 2.0类中注入/使用spring bean 。 这可能吗?如果可以,怎么办? 问题答案: 您可以。已针对Play 2.5.x更新: https://github.com

  • 本文向大家介绍Spring集成MyBatis框架,包括了Spring集成MyBatis框架的使用技巧和注意事项,需要的朋友参考一下 Java在写数据库查询时,我接触过四种方式: 1、纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错;另一个是