2012-04-11 3 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 내가 때문에 어떤 특정 시간 문제로 컴포넌트 2의 서버 부분을 통해 통신을 피할 필요가 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); 
    } 
} 

에 대한 직접 링크를해야한다. VComponent1은 VComponent2에 직접 액세스 할 수 있어야합니다.

제 시나리오를 도와주세요.

감사합니다, Aritomo

답변

2

당신은이 같은 다른 angel이라는 구성 요소에 대한 참조를 통신 할 수 있습니다 :

서버 측 :

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

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

클라이언트 측 :

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

    Paintable componentPaintable = uidl.getPaintableAttribute("mycomponent", client); 
    .. 
} 
관련 문제