3

単純なアプリケーションで VAADIN フレームワークを使用しています。私は2つのカスタムコンポーネントを持っています。

@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 に直接アクセスできる必要があります。

私のシナリオを教えてください。

ありがとう、有友

4

1 に答える 1

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);
    ..
}
于 2012-04-12T13:20:14.647 に答える