Vaadinのプッシュ機能と送信する方法は、あなたが探しているものですメッセージを登録された "クライアント"のリスト(この場合、変更について知っておく必要があるVaadin UI)に送信します。あなたはVaadinについて読むことができます
はここにプッシュ:Enabling Server Pushとも記事Advanced Push
にVaadinのプッシュ機能は、サーバーではなく、再び要求するために、ブラウザ上で待っているのクライアントへの更新を強制することができます。
メッセージコンポーネントは、購読しているUIにアクションが必要な更新があることを通知する方法として機能します。
これは、複数のユーザーがアクションアイテムであることとほぼ同じことを行うプロジェクトがあり、ユーザーが知る必要のある変更にも影響を与えることができる春のスケジュールされたタスクがあると述べました。
注:以下の例は、Enabling Server Pushの記事で利用可能な例に基づいています。
Broadcaster.java - ブロードキャストを受信するインスタンスを登録し、ブロードキャストを送信する機能を提供するメカニズムとして機能します。以下の例では、メッセージ(BroadcastMessage)を表すクラスを持っていますが、もちろんそれを単純化することもできます。
public class Broadcaster implements Serializable {
private static final long serialVersionUID = 3540459607283346649L;
static ExecutorService executorService = Executors.newSingleThreadExecutor();
private static LinkedList<BroadcastListener> listeners = new LinkedList<BroadcastListener>();
public interface BroadcastListener {
void receiveBroadcast(BroadcastMessage message);
}
public static synchronized void register(BroadcastListener listener) {
listeners.add(listener);
}
public static synchronized void unregister(BroadcastListener listener) {
listeners.remove(listener);
}
public static synchronized void broadcast(final BroadcastMessage message) {
for (final BroadcastListener listener: listeners)
executorService.execute(new Runnable() {
@Override
public void run() {
listener.receiveBroadcast(message);
}
});
}
}
ここに私のBroadcastMessageのために定義したクラスがあります。アイデアは私が持っているメッセージの種類を示すための方法を持つことであり、また地図
public class BroadcastMessage implements Serializable {
private static final long serialVersionUID = 5637577096751222106L;
public BroadcastMessageType messageType;
public Map<String, String> params;
public BroadcastMessage() {
}
public BroadcastMessage(BroadcastMessageType messageType) {
this.messageType = messageType;
this.params = new HashMap<String, String>();
}
public BroadcastMessage(BroadcastMessageType messageType, Map<String, String> params) {
this.messageType = messageType;
this.params = params;
}
public BroadcastMessageType getMessageType() {
return messageType;
}
public void setMessageType(BroadcastMessageType messageType) {
this.messageType = messageType;
}
public Map<String, String> getParams() {
return params;
}
public void setParams(Map<String, String> params) {
this.params = params;
}
}
の形でいくつかのペイロードこれは、ブロードキャストを聞きたいの例Vaadin UIです。 @Push注釈に注意してください。これがなければ、クライアントはブラウザが決定したときにのみリフレッシュします。 @Pushは、あなたのRESTインターフェースからメッセージを送信するには、それはすぐになります**
@SpringComponent
@UIScope
@Push
@SpringView(name=TaskListComponent.NAME)
public class TaskListComponent extends MyCustomComponent implements Broadcaster.BroadcastListener, View {
/** PRUNED DOWN, TO DEMONSTRATE THE KEY CODE **/
// Register this window when we enter it
@Override
public void enter(ViewChangeEvent event) {
Broadcaster.register(this);
}
// Must also unregister when the UI expires
@Override
public void detach() {
Broadcaster.unregister(this);
super.detach();
}
// Receive a broadcast
@Override
public void receiveBroadcast(BroadcastMessage message) {
getUI().access(new Runnable() {
@Override
public void run() {
// DO WHATEVER YOU NEED TO DO HERE.
// I CALLED INITIALIZE BUT IT COULD BE
// JUST YOU FIELD UPDATE
if (message.getMessageType().equals(BroadcastMessageType.REFRESH_TASK_LIST))
initialize();
}
});
}
}
:
Broadcaster.broadcast(
new BroadcastMessage(
BroadcastMessageType.AUTO_REFRESH_LIST
)
);
・ホープ、このことができます! :)
あなたはUIのインスタンスが10個開いているときにアクセスしたいのですか?おそらく、あなたはもっとよくキュー/放送システム –
あなたの権利が良いだろうが、私はそれがアプリケーションの単一のユーザー構成の一部になるので、それは大丈夫だと思う。しかし、例えば、次のようなUIインスタンスを区別する可能性はあるか? ID? – eSKape