Ayuda Navigator y Menu plz.

Hola Amigos:

Me gustaria dejar el login solo en una ventana aparte, pero al configurarlo con Navigator incluso el login queda con el menu …

Entiendo que mi problema esta en Navigator nav=new Navigator(this,p); ya que todas las ventanas se veran dentro del Panel y necesito que que login sea una ventana sola :frowning:

Agradeceria me indicaran como hacerlo…

Dejo mis codigos:

package com.vaadin.ricardo.proyecto.logintest;
import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.annotations.Widgetset;
import com.vaadin.navigator.Navigator;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.Panel;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@Theme("mytheme")
@Widgetset("com.vaadin.ricardo.proyecto.logintest.MyAppWidgetset")
public class MyUI extends UI {
    @Override
    protected void init(VaadinRequest vaadinRequest) {
        VerticalLayout layout = new VerticalLayout();
        MenuBar menu=new MenuBar();
        menu.setSizeFull();
        MenuItem mnuArchivo=menu.addItem("File", null);
        MenuItem mnuSalir=mnuArchivo.addItem("Close Sesion", null);
        MenuItem mnuModule=menu.addItem("Modules", null);
        MenuItem mnuWindowsOne=mnuModule.addItem("Windows One", null);
        MenuItem mnuWindowsTwo=mnuModule.addItem("Windows Two", null);
        layout.addComponent(menu);
        Panel p=new Panel("Modules");
        Navigator nav=new Navigator(this,p);
        layout.addComponent(p);
        setContent(layout);
       
        //nav.addView("", MainView.class);
        nav.addView("", LoginView.class);
        nav.addView(LoginView.NAME, LoginView.class);
        nav.addView(WindowsOne.NAME, WindowsOne.class);
        nav.addView(WindowsTwo.NAME, WindowsTwo.class);
        mnuSalir.setCommand(new MenuBar.Command() {
            @Override
            public void menuSelected(MenuBar.MenuItem selectedItem) {
                MyUI.getCurrent().getNavigator().navigateTo("login");
            }
        });
        mnuWindowsOne.setCommand(new MenuBar.Command() {
            @Override
            public void menuSelected(MenuItem selectedItem) {
                MyUI.getCurrent().getNavigator().navigateTo("menuOne");
            }
        });
        mnuWindowsTwo.setCommand(new MenuBar.Command() {
            @Override
            public void menuSelected(MenuItem selectedItem) {
                MyUI.getCurrent().getNavigator().navigateTo("menuTwo");
            }
        });
    }
    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}
package com.vaadin.ricardo.proyecto.logintest;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.FormLayout;
import com.vaadin.ui.PasswordField;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
public class LoginView extends VerticalLayout implements View{
     public static final String NAME="login";
   FormLayout form=new FormLayout();
    public LoginView(){
        TextField txtUsername=new TextField("UserName");
        PasswordField txtPassword=new PasswordField("Password");
        form.addComponent(txtUsername);
        form.addComponent(txtPassword);
        Button btn=new Button("Log In");
        this.addComponent(form);
        this.addComponent(btn);
       
         
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
    }
    
}
package com.vaadin.ricardo.proyecto.logintest;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class WindowsOne extends VerticalLayout implements View{
    public static final String NAME="menuOne";
    public WindowsOne(){
        this.addComponent(new Label("THIS IS MY WINDOWS ONE"));
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
  
    }
}
package com.vaadin.ricardo.proyecto.logintest;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class WindowsTwo extends VerticalLayout implements View{
    public static final String NAME="menuTwo";
    public WindowsTwo(){
        this.addComponents(new Label("This is my windows two"));
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
  
    }
    
}

Hola,

Si a lo que te refieres con “dejar el login solo en una ventana aparte” es mostrar sólo el componente LoginView al iniciar la aplicación, lo que tienes que hacer es agregar ese componente a la UI usando algo como
setContent(new LoginView())
. No necesitas agregar ningún Navigator en ese punto. Luego cuando el usuario se autentique exitosamente, puedes cambiar el contenido de la UI para mostrar el layout que contiene el menú y el panel, y luego agregar y configurar el Navigator. Algo como:

[code]
public class MyUI extends UI {
protected void init(VaadinRequest vaadinRequest) {
showPublicUI();
}

public showPublicUI() {
    Component loginView = new LoginView();
    setContent(loginView);
}

public showPrivateUI() {
    VerticalLayout layout = new VerticalLayout();
    // y toda la lógica del menú, panel, navigator, etc.
    ...
    setContent(layout);
}

}

public class LoginView extends VerticalLayout { // no requiere implementar View
public LoginView() {

Button btn=new Button(“Log In”, this::buttonClicked);
}

public void buttonClicked(ClickEvent event) {
    if(isAuthenticUser()) {
        ((MyUI) UI.getCurrent()).showPrivateUI();
    }
}

public boolean isAuthenticUser() {
    return true; // tienes que implementar este método o delegarlo a otra clase
}

}
[/code]Espero sirva de algo.

Saludos.