2016-11-14 76 views
1

我是Vaadin 7的新手,目前面臨着從主頁面到窗口頁面傳遞值的問題。Vaadin:從主頁面傳遞值到窗口頁面

當我點擊主頁面中的一個事件,它會打開一個窗口頁面,在這裏我需要從主頁面獲得價值。基於這個值,我必須控制Window頁面中的邏輯。這裏是示例代碼,我試過了。我想向窗口頁面發送「beNumber」參數值。

pan[beNumber].addClickListener(new MouseEvents.ClickListener() { 

         private static final long serialVersionUID = 1L; 

         @Override 
         public void click(MouseEvents.ClickEvent event) { 

            // Create a sub-window and set the content 
          Window subWindow = new Window("Patient Transfer", new WardMovementView()); 
          subWindow.setCaptionAsHtml(true); 
          subWindow.setModal(true); 
          subWindow.setWidth("1200px"); 
          subWindow.setHeight("800px"); 
          UI.getCurrent().addWindow(subWindow); 

         } 
        }); 

回答

0

這取決於您是否在其他地方重複使用beNumber。 您可以在主類中公開getBENumber()方法,然後從子窗口中檢索它。

另一種方法是對Window進行子類化,並有一種方法可以從外部設置beNumber。

像這樣:

pan[beNumber].addClickListener(new MouseEvents.ClickListener() { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public void click(MouseEvents.ClickEvent event) { 

     // Create a sub-window and set the content 
     Window subWindow = new PatientTranfserWindow("Patient Transfer", new WardMovementView()); 
     subWindow.setCaptionAsHtml(true); 
     subWindow.setModal(true); 
     subWindow.setWidth("1200px"); 
     subWindow.setHeight("800px"); 
     subWindow.setBENumber(beNumber); 
     UI.getCurrent().addWindow(subWindow); 

    } 
}); 
0

如果你想傳遞非最終變量不使用匿名類。最簡單的解決方案是創建實現MouseEvents.ClickListener的類並將該值傳遞給構造函數。這讓你有能力重用它。

它應該看起來像這樣。

pan[beNumber].addClickListener(new MyCustomListener(beNumber)); 

class MyCustomListener implements MouseEvents.ClickListener{ 

final int beNumber;//I guess you use int in your arrays 

public MyCustomListener(int beNumber){ 
this.beNumber = beNumber; 
} 
@Override 
public void click(MouseEvents.ClickEvent event) { 

           // Create a sub-window and set the content 
         Window subWindow = new Window("Patient Transfer", new WardMovementView(beNumber));//pass that var to your custom component if you want to use it 
         subWindow.setCaptionAsHtml(true); 
         subWindow.setModal(true); 
         subWindow.setWidth("1200px"); 
         subWindow.setHeight("800px"); 
         UI.getCurrent().addWindow(subWindow); 

        } 


} 

如果你想在多個地方使用它,這個方法也非常有用。