簡體   English   中英

Vaadin - 在視圖之間傳遞數據

[英]Vaadin - passing data between views

我在Vaadin和JavaEE中都很新,我認為我有基本的問題,但很樂意提供幫助。

我的Vaadin項目中有3個類,這里​​是:主類,只響應啟動和創建導航器:

public class MyprojectUI extends UI {


    public Navigator navigator;
        public static final String SECOND_VIEW = "SecondView";

        @WebServlet(value = "/*", asyncSupported = true)
        @VaadinServletConfiguration(productionMode = false, ui = MyprojectUI.class)
        public static class Servlet extends VaadinServlet {
        }

        @Override
        protected void init(VaadinRequest request) {
            final VerticalLayout layout = new VerticalLayout();
            layout.setMargin(true);
            setContent(layout);

            ComponentContainerViewDisplay viewDisplay = new ComponentContainerViewDisplay(layout);
            navigator = new Navigator(UI.getCurrent(), viewDisplay);
            navigator.addView("", new FirstView());
            navigator.addView(SECOND_VIEW, new SecondView());
        }

    }

和兩個觀點類:

public class FirstView extends HorizontalLayout implements View {

    TextArea text = new TextArea();
    Button button = new Button("go");

    @Override
    public void enter(ViewChangeEvent event) {
        this.addComponent(text);
        this.addComponent(button);
        button.addClickListener(new ClickListener() {
            @Override
            public void buttonClick(ClickEvent event) {
                getUI().getNavigator().navigateTo(MyprojectUI.SECOND_VIEW);
            }
        });
    }
}

-

public class SecondView extends HorizontalLayout implements View {

    Label label = new Label("Passed text here");

    @Override
    public void enter(ViewChangeEvent event) {
        this.addComponent(label);
    }

}

如何將TextArea中的數據傳遞到第二個視圖? 我希望在單擊“go”按鈕時將標簽文本設置為TextArea中的文本。

感謝幫助。

我建議您應用Model-View-Presenter模式。 查看已經完成。 這里不需要模型。 只需寫一個演示者。 在MVP中,Presenter由視圖觸發,然后演示者從視圖中收集所需的數據,進行一些計算和更新視圖。 在目前的情況下,它可能看起來像:

class Presenter {
  FirstView firstView;
  SecondView secondView;
  public Presenter (FirstView firstView, SecondView secondView) {
    this.firstView = firstView;
    this.secondView = secondView;
  }
  public void goClicked(UI ui) {
     secondView.label.setValue(firstView.text.getValue());
     ui.getNavigator().navigateTo(MyprojectUI.SECOND_VIEW);
  }
}

代碼簡化了,推薦的做法是定義一個視圖接口而不是直接字段訪問,但主要思路是一樣的。

SecondView secondView = new SecondView();
navigator.addView(SECOND_VIEW, secondView );
Presenter presenter = new Presenter(firstView, secondView);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM