Open SubWindow with a link

i am using Vaadin 8

I have a SubWindow-Class

@ViewScoped
public class AboutSubView extends Window {
	   public static final String VIEW_NAME = "About";

	    public AboutSubView() {
	        VerticalLayout subContent = new VerticalLayout();
			this.setContent(subContent);
			this.center();
			
			TextArea txaMessage = new TextArea();
			
			subContent.addComponent(txaMessage);
			getUI().addWindow(this);
	    }
}

How can i open via CDI the AboutSubView as a Sub-Window via Link from my View HelpView

@UIScoped
public class HelpView extends VerticalLayout implements View {

	@PostConstruct
	void init() {
		addComponent(getAbout());
	}
	
	private Link getAbout() {
		AboutSubView aboutView = new AboutSubView();
    	Link link = new Link();
		... 
    	return link;
    }

Hi,
you cannot add the window inside AboutSubView constructor because getUI() will return null until the window is attached.

You can use a Button instead of a Link and do something like this

Button btn = new Button("About", ev -> getUI().addWindow(new AboutSubView()));

If you are using Valo theme (or your custom theme is based on Valo) you can make the button appear like a link with the appropriate css class

btn.setStyleName(ValoTheme.BUTTON_LINK);

And if AboutSubView has dependencies consider to inject it into HelpView instead of using the new operator

HTH
Marco

Thanks for your answer, but I still get an error.

My code is now:

@ViewScoped
public class AboutSubView extends Window {
	   public static final String VIEW_NAME = "About";

	    public AboutSubView() {
	        VerticalLayout subContent = new VerticalLayout();
			this.setContent(subContent);
			this.center();
			
			TextArea txaMessage = new TextArea();
			
			subContent.addComponent(txaMessage);
			getUI().addWindow(this);
	    }
}
@CDIView(Constants.HELP_VIEW)
@UIScoped
public class HelpView extends VerticalLayout implements View {
	@Inject
	AboutSubView aboutView;

	@PostConstruct
	void init() {
		Button about = new Button("About", ev -> getUI().addWindow(aboutView));
		about.addStyleName("link");
		addComponent(about);
	}

The error is:

07:41:00,823 SEVERE [com.vaadin.server.DefaultErrorHandler]
 (default task-2) : java.lang.NullPointerException
	at org.app.view.help.AboutSubView.<init>(AboutSubView.java:21)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:119)
	at org.jboss.weld.injection.ConstructorInjectionPoint.invokeAroundConstructCallbacks(ConstructorInjectionPoint.java:92)
	at org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:78)
	at org.jboss.weld.injection.producer.AbstractInstantiator.newInstance(AbstractInstantiator.java:28)
	at org.jboss.weld.injection.producer.BasicInjectionTarget.produce(BasicInjectionTarget.java:112)
	at org.jboss.weld.injection.producer.BeanInjectionTarget.produce(BeanInjectionTarget.java:186)
	at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:158)
	at org.apache.deltaspike.core.util.context.ContextualStorage.createContextualInstance(ContextualStorage.java:131)
	at org.apache.deltaspike.core.util.context.AbstractContext.get(AbstractContext.java:129)
	at com.vaadin.cdi.internal.ContextWrapper.get(ContextWrapper.java:51)
	at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
	at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:689)
	at org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:789)
	at org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
	at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:335)
	at org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:346)
	at org.jboss.weld.injection.producer.ResourceInjector$1.proceed(ResourceInjector.java:69)
	at org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
	at org.jboss.weld.injection.producer.ResourceInjector.inject(ResourceInjector.java:71)
	at org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:117)
	at org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:159)
	at org.apache.deltaspike.core.util.context.ContextualStorage.createContextualInstance(ContextualStorage.java:131)
	at org.apache.deltaspike.core.util.context.AbstractContext.get(AbstractContext.java:129)
	at com.vaadin.cdi.internal.ContextWrapper.get(ContextWrapper.java:51)
	at org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:100)
	at org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:689)
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:712)
	at org.jboss.weld.util.ForwardingBeanManager.getReference(ForwardingBeanManager.java:64)
	at org.jboss.weld.bean.builtin.BeanManagerProxy.getReference(BeanManagerProxy.java:86)
	at org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:497)
	at org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:274)
	at org.apache.deltaspike.core.api.provider.BeanProvider.getContextualReference(BeanProvider.java:268)
	at com.vaadin.cdi.internal.ViewContextualStorageManager.prepareChange(ViewContextualStorageManager.java:71)
	at com.vaadin.cdi.internal.ViewContextualStorageManager$Proxy$_$$_WeldClientProxy.prepareChange(Unknown Source)
	at com.vaadin.cdi.CDIViewProvider.getView(CDIViewProvider.java:226)
	at com.vaadin.navigator.Navigator.navigateTo(Navigator.java:652)
	at org.app.view.TopMainMenu.lambda$new$d9aec940$1(TopMainMenu.java:52)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:499)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:273)
	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:237)
	at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1014)
	at com.vaadin.ui.Button.fireClick(Button.java:384)
	at com.vaadin.ui.Button$1.click(Button.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:155)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:116)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:445)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:410)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:274)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:90)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1601)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:445)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:67)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
	at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1526)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:360)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
	at java.lang.Thread.run(Thread.java:745)

Hi,
as said above you cannot add the window inside AboutSubView constructor because getUI() will return null.

Try to remove getUI().addWindow(this) from AboutSubView constructor.

HTH
Marco

Hi Marco
Thanks, now it works

One more question to Vaadin CDI

how can i call a Constructur with parameter?

Example:

@CDIView(Constants.TITLE_VIEW)
public class TitleView extends VerticalLayout implements View {

	@Inject
	TitleDetailView titleDetailView(...) ;
	
	Title selectedTitle = new Title();
	Button detailView = new Button("detailView", ev -> getUI().addWindow(titleDetailView(selectedTitle)));
	...
}
@ViewScoped
public class TitleDetailView extends Window {
	public TitleDetailView(Title selectedTitle) {
	...
	}
}

My problem is that i want to inject TitleDetailView with a Parameter?

Have you any suggestion how to solve it?

how can i call a Constructur with parameter?

Things start to get more complex when you add parameters into play with CDI. You probably need to use Producer see here:

http://buraktas.com/cdi-dependency-injection-producer-method-example/

Thanks for the answer.
The website is very good