2012-04-11 2 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); 
    .. 
} 
Смежные вопросы