@Override public UI createInstance(UICreateEvent event) { final Class<VaadinUIIdentifier> key = VaadinUIIdentifier.class; final VaadinUIIdentifier identifier = new VaadinUIIdentifier(event); CurrentInstance.set(key, identifier); try { logger.debug( "Creating a new UI bean of class [{}] with identifier [{}]", event.getUIClass().getCanonicalName(), identifier); return webApplicationContext.getBean(event.getUIClass()); } finally { CurrentInstance.set(key, null); } }
@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); } }