2015-09-09 30 views
1

我做了一個表格和相應的SQLContainer。該表中有一個包含電話號碼的列。在db表中對應列的類型是int。我希望Vaadin表的格式化值能夠使查看電話號碼變得沒有像千位分隔符(8,888 - > 8888)那樣的昏迷或點狀。格式化表格單元格中的值

我已經作出了類似的事情,以表其數據來源是這樣一個JPAContainer:

Table imenikTable = new Table("Imenik", imenikData){ 
      /** 
      * 
      */ 
      private static final long serialVersionUID = 8213291207581835298L; 

      @Override 
      protected String formatPropertyValue(Object rowId, 
        Object colId, @SuppressWarnings("rawtypes") Property property) { 

       Object v = property.getValue(); 

       if (v instanceof Integer) { 

       DecimalFormat df = (DecimalFormat) DecimalFormat.getInstance(getLocale()); 
       df.applyLocalizedPattern("##00"); 
       return df.format(v); 


       } 
       return super.formatPropertyValue(rowId, colId, property); 
      } 
     }; 

而且一切正常。但是當我用SQLContiner而不是JPAContainer進行類似的構建時,簡單地忽略了它。我試圖改變這樣的方式:

StringToIntegerConverter plainIntegerConverter = new StringToIntegerConverter(){ 

       private static final long serialVersionUID = -7517984934588222147L; 

       protected NumberFormat getFormat(Locale locale){ 
        NumberFormat format = super.getFormat(locale); 
        format.setGroupingUsed(false); 
        return format; 
       } 
      }; 

      contaktListTable.setConverter("telbr", plainIntegerConverter); 

但仍然我的環境忽略我,甚至沒有錯誤信息!有什麼問題?

回答

1

我覺得

Object v = property.getValue(); 

當您使用SQLContainer沒有返回一個整數值,這就是爲什麼你看不到任何異常,沒有被執行的條件塊。

你可以用斷點檢查嗎?

+0

是的,我檢查過。我也得出了同樣的結論。我正在嘗試在演示文稿級別上進行轉換。在MySql基礎中是int類型。什麼類型可以在SQLcontainer轉換之前在表(它變成字符串)? – vmaric

+0

是的,我檢查與斷點。這個值不是整數。 – vmaric

+0

您使用Oracle DB嗎? vaadin這本書講述了這一點:當使用Oracle數據庫時,Oracle JDBC驅動程序將大部分或全部數字類型轉換爲java.lang.BigDecimal的 。 –

相關問題