如何在客户端请求清除按钮后刷新BeanFieldGroup?

时间:2015-08-25 23:20:34

标签: ajax refresh components httprequest vaadin

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

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

这里有更好理解的内容:

我的Vars:
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());
}

问题是,如果我单击画布结构内的服务,我需要单击此按钮进行用户视图刷新。顺便说一句,这个结构是用javascript实现的,点击总是会向服务器发出一个AJAX请求[ type = POST ]。发送数据将正确保存在临时变量中,但我的页面不会显示任何内容。内容更改不会显示在用户页面中。但这只有在我使用AJAX请求时才会出现。如果我点击其他组件,它可以不使用按钮。 ):

知道如何解决这类问题 每个回复的Thx。

1 个答案:

答案 0 :(得分:1)

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

在vaadin中,如果您修改服务器端的UI,而不是正常的“来自客户端的操作”,那么这些更改将仅显示在与客户端的下一次交互中。

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

Fortunally vaadin包含一个易于使用的推送系统实现。

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

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

您必须记住,您需要同步对UI的访问才能获得一致的结果。 (还记录在book of vaadin