2014-01-21 2 views
1

Я пытаюсь интегрировать Vaadin с весной. В моем главном классе приложения Vaadin у меня есть:Интеграция Vaadin и Spring - @Inject не работает

public class MyVaadinApplication extends UI { 

@Inject 
private PrivatePersonBo privatePersonBo; 

@Override 
public void init(VaadinRequest request) { 
    Layout layout = new FormLayout(); 
    layout.setCaption("New Private Person"); 
    setContent(layout); 

    ApplicationContext appContext = new ClassPathXmlApplicationContext("resources/spring/Context.xml"); 
    appContext.getBean(MyVaadinApplication.class); 
    PrivatePersonBo privatePersonBo = (PrivatePersonBo) appContext.getBean("privatePersonBo"); 
    PrivatePerson existingEmployee = privatePersonBo.findByName("TestUserName"); 

} 

} 

Если я боб из контекста непосредственно я получаю боб, однако если я комментирую строку, которая recieves боба из контекста приложения, то @Inject аннотаций не работает, и я получаю NullPointerException. Мой развертывание дескрипторов ниже:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
    version="3.0"> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:resources/spring/Context.xml</param-value> 
</context-param> 

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

<servlet> 
    <servlet-name>VaadinApplicationServlet</servlet-name> 
    <servlet-class>com.vaadin.server.VaadinServlet</servlet-class> 
    <init-param> 
     <param-name>UI</param-name> 
     <param-value>pl.adamsalata.MyVaadinApplication</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>VaadinApplicationServlet</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Любые предложения, пожалуйста?

ответ

1

Вы можете интегрировать Vaadin 7 с весной в два простых шага:

1) Создать UIProvider этот поиск UIs в весеннем контексте:

public class SpringUIProvider extends DefaultUIProvider { 

    @Override 
    public UI createInstance(UICreateEvent event) { 
     ApplicationContext ctx = WebApplicationContextUtils 
       .getWebApplicationContext(VaadinServlet.getCurrent().getServletContext()); 

     return ctx.getBean(event.getUIClass()); 
    } 
} 

2) Объявите UIProvider в web.xml:

<context-param> 
       <param-name>UIProvider</param-name> 
       <param-value>org.example.SpringUIProvider</param-value> 
</context-param> 

И не забудьте использовать прототип для классов пользовательского интерфейса.

+0

Спасибо, это работает. – BlueLettuce16

0

Если вы хотите интегрировать Vaadin с Spring, используйте функцию @Configurable. Затем все созданные объекты (даже если вы создаете их с использованием нового кода MyObject()) будут интегрированы с контекстом Spring. Вы можете найти более подробную информацию о такой установке в Спринг документации: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-using-aspectj

Смежные вопросы