上次只是吧vaadin和spring整合到一起了,如果要在vaadin的页面中使用spring中的bean我用的是注解注入的方法(构造函数注入、属性注入),
1.页面对象
如这是我的一个自定义页面
package com.iyspace.manager.ui.user;
import java.net.MalformedURLException;
import java.net.URL;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.ui.Embedded;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
@Component
@Scope("prototype")
public class GroupPage extends VerticalLayout {
private static final long serialVersionUID = -3699494967134807703L;
private Panel panel;
public GroupPage(){
init();
}
public void init(){
URL url;
try {
url = new URL("http://www.baidu.com");
Embedded browser = new Embedded("", new ExternalResource(url));
browser.setType(Embedded.TYPE_BROWSER);
browser.setSizeFull();
this.addComponent(browser);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
该页面继承 com.vaadin.ui.VerticalLayout 布局类,内嵌了一个iframe内容链接是 baidu.com,
在使用该页面时不是直接去new一个对象而是将该页面纳入spring的管理这样页面就可以使用spring中的bean了。
注解Component 将页面纳入spring容器的管理,Scope注解指定每次(每次请求时)得到一个新的页面。
2.得到页面对象
自定义ViewManager类,继承org.springframework.context.ApplicationContextAware,使用spring的反射得到spring容器中的页面对象
package com.iyspace.manager.ui;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.iyspace.manager.VaadinmanagerApplication;
import com.iyspace.manager.ui.main.MainWindow;
@Component
@Scope("session")
public class ViewManager implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
this.applicationContext = applicationContext;
}
public <T> T createView(Class<T> viewClazz){
T view = applicationContext.getBean(viewClazz);
return view ;
}
public <T> T switchView(Class<T> viewClazz){
T view = applicationContext.getBean(viewClazz);
com.vaadin.ui.Component c = (com.vaadin.ui.Component)view;
c.setSizeFull();
VaadinmanagerApplication.get().mainWindow.switchView(c);
return view;
}
}