如何在没有按钮的情况下在客户端请求后刷新 BeanField 组?

How to refresh a BeanFieldGroup after a client request whitout a button?

希望能在这里找到帮助。
是否可以刷新 Vaadin 中的单个组件。

例如,客户端请求在单个组件内更改值 [ type = String] 并在更改后立即刷新此组件。

这里为了更好的理解内容:

我的变量:
private static BeanFieldGroup<Service> binder = new BeanFieldGroup<Service>(Service.class);
private FormLayout form = new FormLayout();

我的构造函数:

public ServiceDetails()
{
    vl = new CssLayout();
    vl.addComponent(new Label("Service Details"));
    vl.addComponent(form);
    vl.setStyleName("details");
    vl.setSizeFull();

    addPropertyChangeListener(new MyPropertyChangeListener());

    refreshBT = new Button("Show Updated Content");
    form.addComponent(refreshBT);
    addListener();



    form.addComponent(binder.buildAndBind("S-ID: ", "id"));
    form.addComponent(binder.buildAndBind("Name: ", "name"));
    form.addComponent(binder.buildAndBind("Description: ", "description"));
    form.addComponent(binder.buildAndBind("Service Tags: ","allTagsOfService")); 
    form.addComponent(binder.buildAndBind("Attributes: ","allInOnAtt")); 
    form.addComponent(binder.buildAndBind("Capabilities: ","allInOnCapa")); 
    form.addComponent(binder.buildAndBind("Categorization: ","allInOnCat")); 
    form.addComponent(binder.buildAndBind("Relations: ","allInOnRela")); 
    form.addComponent(binder.buildAndBind("Stakeholder: ","allInOnStkh")); 
    form.addComponent(binder.buildAndBind("Resources: ","allInOnRes")); 
    form.addComponent(binder.buildAndBind("Quality: ","quality")); 
    form.addComponent(binder.buildAndBind("Process: ","process")); 
    form.addComponent(binder.buildAndBind("Finance: ","finance"));  
    form.setImmediate(true);

    setCompositionRoot(vl);

}

按钮将为用户更新显示的内容。如果完成 AJAX 请求,数据将在服务器上但不会显示。如果单击该按钮,用户视图将正确更新。

每个变量更改都会调用一个方法来为 BeanFieldGroup 设置我的内容。

public void setService(Service service)
{
    setServ(service);
    binder.setItemDataSource(getServ());
}

现在的问题是,如果我单击 canvas 结构内的服务,我需要单击此按钮来刷新用户视图。顺便说一下这个结构是在javascript中实现的,点击总是会向服务器做一个AJAX-request [ type = POST] .发送数据将正确保存在临时变量中,但我的页面上不会显示任何内容。内容更改不会显示到用户页面。但这只有在我使用 AJAX-requests 时才会出现。如果我点击另一个组件,它可以在不使用按钮的情况下工作。 ):

知道如何解决此类问题。
感谢每个回复。

使用 http 时,您必须牢记,服务器通常无法通知客户端服务器端所做的更改。

在 vaadin 中,如果您在服务器端修改 UI,超出正常 "Action from client",那么这些更改将仅在与客户端的下一次交互时显示。

如果您需要将更改从服务器发送到客户端,则必须使用推送技术,其中服务器可以通知客户端有关 new/changed 内容。

幸运的是,vaadin 包含一个易于使用的推送系统实现。

Book of Vaadin中有一个complete section about server push

基本上,您将 @Push 注释添加到 UI class 并添加所需的库。

请记住,您需要同步访问 UI 以获得一致的结果。 (也记录在 book of vaadin