我希望我能在这里找到帮助 是否可以刷新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。
答案 0 :(得分:1)
使用http时,您必须记住,服务器通常无法通知客户端服务器端所做的更改。
在vaadin中,如果您修改服务器端的UI,而不是正常的“来自客户端的操作”,那么这些更改将仅显示在与客户端的下一次交互中。
如果您需要将更改从服务器发送到客户端,则必须使用推送技术,服务器可以在其中通知客户新的/更改的内容。
Fortunally vaadin包含一个易于使用的推送系统实现。
在Book of Vaadin
中有一个complete section about server push。
基本上,您将@Push
注释添加到UI类并添加所需的库。
您必须记住,您需要同步对UI的访问才能获得一致的结果。 (还记录在book of vaadin
)