我想在同一窗口選項卡中顯示不同的頁面。我使用Empty和Empty1類。類Empty是一個主頁面,視圖Empty1被加載到Empty中。當我使用Navigator和SpringViewProvider時,爲什麼頁面會被加載兩次?
稱爲空類:
@Theme("valo")
@SpringUI(path = "empty")
public class Empty extends UI {
@Autowired
private SpringViewProvider viewProvider;
@Override
protected void init(VaadinRequest request) {
System.out.println("init Empty");
final VerticalLayout root = new VerticalLayout();
root.setSizeFull();
setContent(root);
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);
navigator.navigateTo(Empty1.VIEW_NAME);
}
}
和類稱爲Empty1(視圖):
@SpringView(name = Empty1.VIEW_NAME)
public class Empty1 extends VerticalLayout implements View {
public static final String VIEW_NAME = "empty1";
@PostConstruct
void init() {
addComponent(new Label("This is the default view"));
System.out.println("init Empty1");
}
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
// the view is constructed in the init() method()
}
}
當我打開新的窗口,我看到一句話「這是默認的視圖」和它的確定。 但是,當我看到trackstace時,我注意到顯示了兩次的句子「init empty1」,爲什麼?
這意味着視圖內容Empty1被加載了兩次。 我想只有一次加載視圖。
最終效果應該是這個樣子的「空」類:
@Theme("valo")
@SpringUI(path = "empty")
public class Empty extends UI {
@Autowired
private SpringViewProvider viewProvider;
@Override
protected void init(VaadinRequest request) {
System.out.println("init Empty");
final VerticalLayout root = new VerticalLayout();
root.setSizeFull();
setContent(root);
Navigator navigator = new Navigator(this, this);
navigator.addProvider(viewProvider);
int optionAuto = 2;
switch (optionAuto) {
case 1:
getUI().getNavigator().navigateTo(Empty1.VIEW_NAME);
break;
case 2:
getUI().getNavigator().navigateTo(Empty2.VIEW_NAME);
break;
}
}
}
和它的作品,但鑑於「Empty1」或「Empty2」被稱爲兩次。我如何修改代碼以便視圖只被調用一次?
我在'Empty'類的末尾添加了您建議的片段代碼。我評論navigator.navigateTo(...)線,但它不起作用。這個問題的描述如下: java.lang.IllegalArgumentException:嘗試導航到未知狀態''和錯誤視圖提供程序不存在路徑:/空 – Fisherek15
我編輯了一些問題,也許現在我更好地解釋我想要的東西去做。 – Fisherek15
我已經更新了代碼,它現在應該可以工作(它適用於vaadin 8.0.5)。 –