Help me about Navigator and permanent menubar, thanks.

Hi all, my code found well, but i need mantain the menu in the top of my project, help me please.

i put my code:

MyUI.java (Principal)

package com.vaadin.ricardo.proyecto.crud_vaadin;
import com.vaadin.ricardo.proyecto.views.CiudadView;
import com.vaadin.ricardo.proyecto.views.UsuarioView;
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.ricardo.proyecto.views.MainView;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
@Theme("mytheme")
@Widgetset("com.vaadin.ricardo.proyecto.crud_vaadin.MyAppWidgetset")
public class MyUI extends UI {
    
   public Navigator nav=new Navigator(this,this);
    @Override
    protected void init(VaadinRequest vaadinRequest) {
        final VerticalLayout layout = new VerticalLayout();
        layout.setMargin(true);
        setContent(layout);
        run();
    
        
    }
    public void run(){
        nav.addView("", MainView.class);
        nav.addView(MainView.NAME, MainView.class);
        nav.addView(CiudadView.NAME, CiudadView.class);
        nav.addView(UsuarioView.NAME, UsuarioView.class);
    }
    
    public void setNav(String url){
        nav.navigateTo(url);
    }
    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}

MainView.java

package com.vaadin.ricardo.proyecto.views;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ricardo.proyecto.crud_vaadin.MyUI;
import com.vaadin.ui.Label;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.Command;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
public class MainView extends VerticalLayout implements View {
    public static final String NAME = "main";
    public MainView() {
        this.setSpacing(true);
        MenuBar menu = new MenuBar();
        MenuItem mnuArchivo = menu.addItem("Archivo", null);
        MenuItem mnuModulo = menu.addItem("Modulo", null);
        MenuItem mnuCiudad = mnuModulo.addItem("Ciudad", null);
        MenuItem mnuUsuario = mnuModulo.addItem("Usuario", null);
        menu.setSizeFull();
        this.addComponent(menu);
        Panel p=new Panel("MI CONTENIDO");
        p.setContent(new Label("Content...."));
        this.addComponent(p);
       
        mnuCiudad.setCommand(new Command() {
            @Override
            public void menuSelected(MenuItem selectedItem) {
                MyUI.getCurrent().getNavigator().navigateTo("ciudad");
            }
        });
        mnuUsuario.setCommand(new Command() {
            @Override
            public void menuSelected(MenuItem selectedItem) {
                MyUI.getCurrent().getNavigator().navigateTo("usuario");
            }
        });
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
    }
}

UsuarioView.java

package com.vaadin.ricardo.proyecto.views;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class UsuarioView extends VerticalLayout implements View{
    public static final String NAME="usuario";
    public UsuarioView(){
        Label lbTitulo=new Label("Modulo Usuarios");
        this.addComponent(lbTitulo);
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
    }
    
}

CiudadView.java

package com.vaadin.ricardo.proyecto.views;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class CiudadView extends VerticalLayout implements View{
    public static final String NAME="ciudad";
    public CiudadView(){
        Label lbTitulo=new Label("Modulo Ciudad");
        this.addComponent(lbTitulo);
    }
    @Override
    public void enter(ViewChangeListener.ViewChangeEvent event) {
    }
    
}

Thanks all.

You shouldn’t initialize the navigator with (this, this). The second parameter is the component container into which the views should be loaded. Take the code from you main view, put it directly to the UI class and initialize the navigator with the panel.

// so you have this line of code
Panel p=new Panel("MI CONTENIDO");

....
// you should initialize the navigator with
public Navigator nav=new Navigator(this,p);

i test it Kim, thank you.

mmmm, i need to add MainView to MyUI , and test it, i think

i am some confused … becouse mi main is MyUI and the pricipal view is MainView…?

Your MainView shouldn’t be a View. It sounds like your MainView just consists out of the Menu. So either take the Menu and Navigation code out of MainView and put it for example into MyUI if you still need a “Main View” or change MainView to not be a View but rather just a Layout with your Menu code that you can’t navigate to.

Hi Marius:

Then I can leave the menu at MyUI and remove MainView

Thanks