2012-04-11 57 views
3

我在我的简单应用程序中使用了VAADIN框架。 我有我的2个自定义组件,例如VAADIN客户端组件逻辑

@ClientWidget(value = VComponent1.class) 
public class Component1 { 
    private Component2 cmp2; 

    public void setDataSource(Component2 cmp2) { 
     this.cmp2 = cmp2; 
    } 
} 

@ClientWidget(value = VComponent2.class) 
public class Component2 { 
} 

我想将它们绑定在服务器端。

... 
Component2 cmp2 = new Component2(); 
Component1 cmp1 = new Component1(); 
cmp1.setDataSource(cmp2); 

mainWindow.addComponent(cmp1); 
mainWindow.addComponent(cmp2); 
... 

问题是我不知道如何发送绑定信息到VComponent1。

VComponent1应该有直接的联系VComponent2

public class VComponent2 implements Paintable { 

    public String getCurrentData() { 
     return "Hello"; 
    } 
} 


public class VComponent1 implements Paintable, 
ClickHandler { 
    VComponent2 dataSource; 

    @Override 
    public void onClick(ClickEvent event) { 
     super.onClick(event); 
     String data = dataSource.getCurrentData(); 
     client.updateVariable(uidlId, "curData", data, true); 
    } 
} 

我需要避免由于某些特定的时间问题通过COMPONENT2的服务器部分的通信。 VComponent1应该可以直接访问VComponent2。

你能帮我解决我的情况吗?

感谢, 县有朋

回答

2

您可以参考传达给另一个Vaadin组件是这样的:

服务器端:

public void paintContent(PaintTarget target) throws PaintException {  
    .. 

    target.addAttribute("mycomponent", component); 
    .. 
} 

客户端:

public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { 
    .. 

    Paintable componentPaintable = uidl.getPaintableAttribute("mycomponent", client); 
    .. 
} 
相关问题