@Override public UI createInstance(UICreateEvent uiCreateEvent) { Class<? extends UI> type = uiCreateEvent.getUIClass(); int uiId = uiCreateEvent.getUiId(); VaadinRequest request = uiCreateEvent.getRequest(); Bean<?> bean = scanForBeans(type); String uiMapping = ""; if (bean == null) { if (type.isAnnotationPresent(CDIUI.class)) { uiMapping = parseUIMapping(request); bean = getUIBeanWithMapping(uiMapping); } else { throw new IllegalStateException( "UI class: " + type.getName() + " with mapping: " + uiMapping + " is not annotated with CDIUI!"); } } UIBean uiBean = new UIBean(bean, uiId); try { // Make the UIBean available to UIScopedContext when creating nested // injected objects CurrentInstance.set(UIBean.class, uiBean); return (UI) getBeanManager() .getReference(uiBean, type, getBeanManager().createCreationalContext(bean)); } finally { CurrentInstance.set(UIBean.class, null); } }
@Override public boolean isPreservedOnRefresh(UICreateEvent event) { if (!SpringApplicationContext.getApplicationContext() .isPrototype(getUIBeanName(event.getRequest()))) { return true; } return super.isPreservedOnRefresh(event); }
@Scope("session") @Override public UI createInstance(UICreateEvent event) { return (UI) SpringApplicationContext.getApplicationContext().getBean(getUIBeanName(event.getRequest())); }