Java Vaadin-在视图之间传递数据

Java Vaadin-在视图之间传递数据,java,jakarta-ee,views,vaadin,Java,Jakarta Ee,Views,Vaadin,我对Vaadin和JavaEE非常陌生,我有一个基本的问题,但我很乐意得到帮助 在我的Vaadin项目中,我有3门课,它们是: Main类,仅对启动和创建导航器作出响应: public class MyprojectUI extends UI { public Navigator navigator; public static final String SECOND_VIEW = "SecondView"; @WebServlet(value =

我对Vaadin和JavaEE非常陌生,我有一个基本的问题,但我很乐意得到帮助

在我的Vaadin项目中,我有3门课,它们是: Main类,仅对启动和创建导航器作出响应:

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);
            }
        });
    }
}
-

如何将数据从文本区域传递到第二个视图?我想将标签文本设置为单击“go”按钮时文本区域中的文本


谢谢您的帮助。

我建议您应用模型视图演示者模式。视图已生成。这里不需要模型。写一个演示者就行了。 在MVP中,Presenter由视图触发,然后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);
SecondView secondView = new SecondView();
navigator.addView(SECOND_VIEW, secondView );
Presenter presenter = new Presenter(firstView, secondView);