0

私は と で動作するアプリケーションを持っていVaadinますSpring (+Security)。を使用して、更新をクライアント インターフェイスに動的にプッシュしようとしていますvaadin-push

すべてのクライアントで同じ「ビュー」を作成したい。ビューは、プッシュによって動的にインクリメントされるカウンターを取得する必要があります。したがって、クライアントがページを表示している間、カウンターはそれ自体を更新します (または、私の例では、ページに複数のラベル コンポーネントを追加します)。すべてのクライアントに同じ値が表示されるはずです。

しかし、Web ページにプッシュされた変更が表示されません。なんで?

//the static controller the dynamically changes content
@Controller
public class ViewPresenter {
    private static int counter = 0;

    @Autowired
    private void StaticView view;

    @Scheduled(fixedRate = 1000)
    public void refresh() {
        //push the content change periodically to frontend
        view.getUI().access(new Runnable() {
            @Override
            public void run() {
                view.addComponent(new Label("refresh: " + counter++);
                Sysout("update executed: " + counter); //OK, is printed
            }
        });
    }
}

//the static test component that gets a new label added on every content change
@VaadinComponent
public class StaticView extends CssLayout {
        //this is the view that every client should see
}

//the secured admin view
@VaadinView(name = "/secured")
@Scope("ui")
@Secured("user")
public class SecuredView extends VerticalLayout implements View {
    @Autowired
    private StaticView staticView;

    @Override
    public void enter(ViewChangeEvent event) {
        addComponent(staticView);
    }
}

//enable push
@Configuration
@Push
public class AppConfig {
}

@VaadinUI
@PreserveOnRefresh
public class ApplicationUI extends UI {

} 

Web ページを手動で更新した場合にのみ、クライアント側で変更を確認できます。ただし、コンテンツ自体は自動的に変更されません。

たぶん、クラス@Pushに配置する必要がありますか?UIしかし、この場合、次のエラーが発生します。

java.lang.IllegalStateException: セッション タイムアウトより長く応答を中断することはできません。org.atmosphere.cpr.AtmosphereResourceImpl.suspend(AtmosphereResourceImpl.java:314) で web.xml の session-timeout の値を増やします。 server.communication.PushHandler$2.run(PushHandler.java:129) at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:242) at com.vaadin.server.communication.PushHandler.access$200(PushHandler. java:55) com.vaadin.server.communication.PushHandler$1.onRequest (PushHandler.java:73) で

4

1 に答える 1