2015-02-24 47 views
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立即更新。

+0

我的猜測是,這jpacontainer持有緩存和地方在改變它的值將傳播到表。你有沒有試過把桌子弄髒? – cfrick 2015-02-24 16:29:31

+0

我會試試。謝謝。我忘記提及JPAContainerFactory.makeNonCached被使用,並且立即模式爲真,並且緩衝被禁用。 – user3511545 2015-02-24 16:32:46

+0

如果您自己解決問題,請爲該帖子添加一個答案(並稍後再接受)。其他用戶更容易識別可能的解決方案並查看問題已解決。謝謝! – 2015-02-26 10:21:38

回答

0

感謝您通知我Jan :)我成功實現了我想要的,也許這有點冒險,因爲我必須在薪酬模型中加入一個小邏輯:在薪水類型的設置者中,我也設置了稅並且UI立即更新。