? ?上次只是吧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; } }?
?
?
?