2013-07-08 36 views
3

我在Vaadin和JavaEE中都很新,我有一個基本的問題,但會很樂意提供幫助。Vaadin - 在視圖間傳遞數據

我有3個班,我Vaadin項目,在這裏,他們是: 主類,只響應啓動和建立導航:

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中的文本。

感謝您的幫助。

回答

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

我建議你應用Model-View-Presenter模式。查看已經完成。這裏不需要模型。只要寫一個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); 
    } 
} 

代碼被簡化,推薦的做法是定義視圖的界面,而不是直接進入領域,但主要的想法是一樣的。

相關問題