使用注解将 Vaadin 6.7.3 和 Spring 3.0.5 整合 (二 使用spring中的Bean)
? ?上次只是吧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 blocke.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;}}??
?
?