0
我有代表員工的模型。它有一個領域(比方說薪水),這也是一個模型。所以基本上它是一個嵌套的屬性。我使用Hibernate,JPAcontainer和MasterDetailEditor來可視化數據。所以我擴展了FieldFactory,以便能夠在薪水的select字段中添加一個值更改偵聽器。這種變化設定了薪水的稅收領域。Vaadin用戶界面不刷新
它工作時,數據在DB,但在UI更新,不。我嘗試啓用Push,使用pollInterval,它們都不起作用。我通過它的屬性來設置價值。
代碼:
這是重寫createField
final AbstractField field = (AbstractField) super.createField(container, itemId, propertyId, uiContext);
field.setImmediate(true);
field.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
final Item item = container.getItem(itemId);
final String salaryTypeSelectorValue =
item.getItemProperty(propertyName).getValue().toString() != null ? item.getItemProperty(propertyName).getValue()
.toString() : REGULAR;
if (REGULAR.equals(salaryTypeSelectorValue)) {
final SalaryHistory salaryHistory = ((JPAContainer<SalaryHistory>) container).getItem(itemId).getEntity();
JPAContainer<SalaryHistory> salaryHistoryContainer = (JPAContainer<SalaryHistory>) container;
salaryHistoryContainer.getItem(itemId).getItemProperty("socialTax").setValue(new BigDecimal("28.5"));
}
}
});
return field;
更新
我設法達到我想要的,也許這是一個有點哈克,因爲我不得不把薪水模型中的一個小邏輯:在薪水類型的設置者中,我也設置了稅收,UI立即更新。
我的猜測是,這jpacontainer持有緩存和地方在改變它的值將傳播到表。你有沒有試過把桌子弄髒? – cfrick 2015-02-24 16:29:31
我會試試。謝謝。我忘記提及JPAContainerFactory.makeNonCached被使用,並且立即模式爲真,並且緩衝被禁用。 – user3511545 2015-02-24 16:32:46
如果您自己解決問題,請爲該帖子添加一個答案(並稍後再接受)。其他用戶更容易識別可能的解決方案並查看問題已解決。謝謝! – 2015-02-26 10:21:38