Vaadin 格式化表格单元格中的值

Vaadin 格式化表格单元格中的值,vaadin,vaadin7,Vaadin,Vaadin7,我制作了一个表和相应的SQLContainer。表中有一列电话号码。在db表格中,对应列的类型是一个int。我希望格式化Vaadin表格的值,这样查看电话号码时就不会出现comas或类似点的千位分隔符(8888->8888) 我已经用这种方式对数据源为JPA容器的表做了类似的事情: Table imenikTable = new Table("Imenik", imenikData){ /** * */

我制作了一个表和相应的SQLContainer。表中有一列电话号码。在db表格中,对应列的类型是一个int。我希望格式化Vaadin表格的值,这样查看电话号码时就不会出现comas或类似点的千位分隔符(8888->8888)

我已经用这种方式对数据源为JPA容器的表做了类似的事情:

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);
但我的环境仍然忽略了我,甚至没有错误消息!有什么问题吗?

我想

Object v =  property.getValue();
在使用SQLContainer时不返回整数值,这就是为什么没有看到任何异常,没有执行条件块


你能用断点检查一下吗?

是的,我检查过了。我得出了同样的结论。我正在尝试在演示级别上进行转换。在MySql库中,是int类型。在表中转换之前,SQLcontainer中可以是什么类型(在表中转换为字符串)?您使用的是Oracle DB吗?vaadin的书告诉我们:当使用Oracle数据库时,大多数或所有数字类型都由Oracle JDBC驱动程序转换为java.math.BigDecimal。此值不是整数。因为它是被忽略的断点。但是当我查看包含数据列的值的类型时(在调试期间),我发现它的类型是java.lang.Integer。我不擅长调试。这可能是我在这方面的观察不可靠。不是我使用MySql!感谢您的及时回复!将Phone属性添加到表中时,是否将其指定为整数?执行此操作时,imenikTable.addContainerProperty(“Phone”,Integer.class,null);我在我的环境中做了一个快速测试,并以这种方式工作。如果需要,我可以共享代码,但是非常简单。