2016-11-14 57 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); 

        } 


} 

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