Mikael Grankvist:
Hi.
Would you have a small project with the 2 views that this happens with?
Whit this information I can’t readily come up with how “Intranet” would get targeted to a longer
route String in any possible situation.
Also on the server I would suggest using ui.navigate(Intranet.class)
instead of the route String as then
we use the navigation string that the class is registered on.
Yes!
The issue is when I’m want to go to http://localhost:8080/Intranet then Vaadin sends me to http://localhost:8080/Intranet/Bokning. Even if I type it in manually in my web browser. It’s like http://localhost:8080/Intranet does not exist, only http://localhost:8080/Intranet/Bokning
I have a page named “Intranet”. This page have a button where it stands “Klicka här”. I assume that you can read Swedish.
@Viewport("width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes, viewport-fit=cover")
@Route("Intranet")
@CssImport("./CSS/Intranet.css")
public class Intranet extends AppLayout {
private static final long serialVersionUID = 1L;
@Autowired
private Top top;
@PostConstruct
public void init() {
// set the top
boolean touchOptimized = true;
addToNavbar(touchOptimized, top.getBarImage(), top.getDrawerToggle());
addToDrawer(top.getTabs());
// Content
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setClassName("verticalLayout");
verticalLayout.setAlignItems(Alignment.CENTER);
Label title = new Label("Intranät");
title.setClassName("title");
String text = "Detta är Spektrakon's intranät. Här kan våra medlemmar komma åt webbapplikationer som vi själva har skapat.";
Label text_title = new Label(text);
text_title.setClassName("text_title");
verticalLayout.add(title, text_title);
String content_text = "Vill du boka vårat konferansrum? Då kan du göra det här. Bara logga in med din Facebook-användare och välj en tid som passar dig.";
createSubjectWithPictures(true, verticalLayout, "subject_horizontal_red", "target-1955257_1920_16_9.jpg", "Bokning", "titel_subject_text_white", content_text, "content_subject_text_white", "button_subject_white", "bild_in_subject_right", Bokning.class);
// The bottom - icons and brand
Footer footer = new Footer();
verticalLayout.add(footer.getIcons(), footer.getQualityBrand());
setContent(verticalLayout);
}
public Intranet() {
}
// Each red or white row in the web app is a subject
private void createSubjectWithPictures(boolean pictureRightSide, VerticalLayout verticalLayout,
String subjectClassName, String bildName, String titel_text, String title_text_css_class,
String content_text, String content_text_css_class, String button_text_css_class,
String bild_in_subject_css_class, Class<Bokning> navigationClass) {
HorizontalLayout subject_horizontal = new HorizontalLayout();
subject_horizontal.setClassName(subjectClassName);
VerticalLayout subject_bild = new VerticalLayout();
Image bild_in_subject = new Image("img/" + bildName, "Picture");
subject_bild.add(bild_in_subject);
bild_in_subject.setClassName(bild_in_subject_css_class);
VerticalLayout text_subject = new VerticalLayout();
Label titel_subject = new Label(titel_text);
titel_subject.setClassName(title_text_css_class);
Label content_subject = new Label(content_text);
content_subject.setClassName(content_text_css_class);
Button clickButton = new Button("Klicka här");
clickButton.setClassName(button_text_css_class);
clickButton.addAttachListener(e -> UI.getCurrent().navigate(navigationClass)); // <--- HERE I WILL NAVIGATE
text_subject.add(titel_subject, content_subject, clickButton);
if (pictureRightSide == true) {
subject_horizontal.add(text_subject, subject_bild);
} else {
subject_horizontal.add(subject_bild, text_subject);
}
verticalLayout.add(subject_horizontal);
}
}
But when I go to that page, instead, Vaadin navigates me to this page instead.
@Viewport("width=device-width, minimum-scale=1, initial-scale=1, user-scalable=yes, viewport-fit=cover")
@Route("Intranet/Bokning")
@CssImport("./CSS/Bokning.css")
public class Bokning extends AppLayout {
private static final long serialVersionUID = 1L;
@Autowired
private Top top;
@PostConstruct
public void init() {
// set the top
boolean touchOptimized = true;
addToNavbar(touchOptimized, top.getBarImage(), top.getDrawerToggle());
addToDrawer(top.getTabs());
// Content
VerticalLayout verticalLayout = new VerticalLayout();
verticalLayout.setClassName("verticalLayout");
verticalLayout.setAlignItems(Alignment.CENTER);
Label title = new Label("Bokning konferansrum");
title.setClassName("title");
String text = "Här kan du boka ett möte i konferansrummet";
Label text_title = new Label(text);
text_title.setClassName("text_title");
verticalLayout.add(title, text_title);
// Create components
DatePicker datum = new DatePicker();
datum.setClassName("item_White");
datum.setPlaceholder("Datum");
TimePicker startTid = createTimePicker("Start");
startTid.setClassName("item_White");
TimePicker stoppTid = createTimePicker("Stopp");
stoppTid.setClassName("item_White");
TextField meddelande = new TextField();
meddelande.setPlaceholder("Meddelande");
meddelande.setClassName("item_White");
EmailField email1 = createEmailField("Medlem 1", "item_White");
EmailField email2 = createEmailField("Medlem 2", "item_White");
EmailField email3 = createEmailField("Medlem 3", "item_White");
EmailField email4 = createEmailField("Medlem 4", "item_White");
EmailField email5 = createEmailField("Medlem 5", "item_White");
EmailField email6 = createEmailField("Medlem 6", "item_White");
EmailField email7 = createEmailField("Medlem 7", "item_White");
EmailField email8 = createEmailField("Medlem 8", "item_White");
EmailField email9 = createEmailField("Medlem 9", "item_White");
EmailField email10 = createEmailField("Medlem 10", "item_White");
Button boka = new Button("Boka möte");
boka.setClassName("item_White");
Button avBoka = new Button("Avboka möte");
avBoka.setClassName("item_White");
// Grid
List<BokningarTabell> bokningar = new ArrayList<>();
bokningar.add(new BokningarTabell());
Grid<BokningarTabell> grid = new Grid<>(BokningarTabell.class);
grid.setClassName("storlek_grid");
grid.setItems(bokningar);
grid.removeColumnByKey("id");
grid.removeColumnByKey("medlemmar_epost");
grid.removeColumnByKey("meddelande");
// Create the form
HorizontalLayout form = new HorizontalLayout();
form.setClassName("subject_horizontal_red");
VerticalLayout left = new VerticalLayout();
left.setClassName("set_to_left");
VerticalLayout right = new VerticalLayout();
right.setClassName("set_to_right");
HorizontalLayout tid_medlemmar = new HorizontalLayout();
FormLayout medlemmar = new FormLayout();
medlemmar.setClassName("set_to_right_medlemmar");
medlemmar.setResponsiveSteps(new ResponsiveStep("25em", 1)); // För att göra eposten inte så långa
form.add(left, tid_medlemmar);
HorizontalLayout buttonForm = new HorizontalLayout();
// Fill the layouts for left
left.add(datum, buttonForm, grid);
buttonForm.add(boka, avBoka);
// Fill the layouts for right
right.add(startTid, stoppTid);
medlemmar.add(meddelande, email1, email2, email3, email4, email5, email6, email7, email8, email9, email10);
tid_medlemmar.add(right, medlemmar);
verticalLayout.add(form);
// The bottom - icons and brand
Footer footer = new Footer();
verticalLayout.add(footer.getIcons(), footer.getQualityBrand());
// Applicera API:n
setContent(verticalLayout);
}
public Bokning() {
}
private EmailField createEmailField(String medlem, String classID) {
EmailField emailField = new EmailField();
emailField.setClassName(classID);
emailField.setClearButtonVisible(true);
emailField.setPlaceholder(medlem);
emailField.setErrorMessage("Skriv en korrekt epostaddres");
return emailField;
}
private TimePicker createTimePicker(String label) {
TimePicker timePicker = new TimePicker();
timePicker.setPlaceholder(label);
timePicker.setMin("00:00");
timePicker.setMax("23:00");
return timePicker;
}
}
The Intranet
class have the route @Route("Intranet")
and the Bokning
class have the route @Route("Intranet/Bokning")
Notice that the navigation to the Intranet
class is at a tab in an AppLayout
here. And there is in THIS class, there is the issue. See the arrow in the comment below.
@Data
@CssImport("./CSS/Top.css")
@Component
@UIScope
public class Top {
private Image barImage;
private DrawerToggle drawerToggle;
private Tabs tabs;
public Top() {
// Navigation bar
barImage = new Image("img/cropped-logo_liggande_rod.png", "Spektrakon Logo");
barImage.setClassName("barImage");
drawerToggle = new DrawerToggle();
drawerToggle.clickInClient(); // Start with closed tabs
drawerToggle.setClassName("drawerToggle");
// Tabs
Tab hem = new Tab("Hem");
Tab produktutveckling = new Tab("Produktutveckling");
Tab industriellDesign = new Tab("Industriell Design");
Tab system = new Tab("System");
Tab kvalitet = new Tab("Kvalitet");
Tab omOss = new Tab("Om oss");
Tab ledigaTjanster = new Tab("Lediga Tjänster");
Tab intranat = new Tab("Intranät");
tabs = new Tabs(hem, produktutveckling, industriellDesign, system, kvalitet, omOss, ledigaTjanster, intranat);
tabs.setOrientation(Tabs.Orientation.VERTICAL);
tabs.setFlexGrowForEnclosedTabs(2);
tabs.addSelectedChangeListener(event -> {
String tabLabel = event.getSelectedTab().getLabel();
System.out.println(tabLabel);
if (tabLabel.equals("Hem")) {
UI.getCurrent().navigate("");
} else if (tabLabel.equals("Produktutveckling")) {
UI.getCurrent().navigate(Produktutveckling.class);
} else if (tabLabel.equals("Industriell Design")) {
UI.getCurrent().navigate(IndustriellDesign.class);
} else if (tabLabel.equals("System")) {
UI.getCurrent().navigate(Systemutveckling.class);
} else if (tabLabel.equals("Kvalitet")) {
UI.getCurrent().navigate(Kvalitet.class);
} else if (tabLabel.equals("Om oss")) {
UI.getCurrent().navigate(OmOss.class);
}else if (tabLabel.equals("Lediga Tjänster")) {
UI.getCurrent().navigate(LedigaTjanster.class);
}else if (tabLabel.equals("Intranät")) {
UI.getCurrent().navigate(Intranet.class); // <--- HERE I will navigate to Intranet.class, but instead I nagivating to the Bokning.class - WHY?
}
});
}
}