如何在没有按钮的情况下在客户端请求后刷新 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
)
希望能在这里找到帮助。
是否可以刷新 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
)