Vaadin 格式化表格单元格中的值
我制作了一个表和相应的SQLContainer。表中有一列电话号码。在db表格中,对应列的类型是一个int。我希望格式化Vaadin表格的值,这样查看电话号码时就不会出现comas或类似点的千位分隔符(8888->8888) 我已经用这种方式对数据源为JPA容器的表做了类似的事情:Vaadin 格式化表格单元格中的值,vaadin,vaadin7,Vaadin,Vaadin7,我制作了一个表和相应的SQLContainer。表中有一列电话号码。在db表格中,对应列的类型是一个int。我希望格式化Vaadin表格的值,这样查看电话号码时就不会出现comas或类似点的千位分隔符(8888->8888) 我已经用这种方式对数据源为JPA容器的表做了类似的事情: Table imenikTable = new Table("Imenik", imenikData){ /** * */
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);我在我的环境中做了一个快速测试,并以这种方式工作。如果需要,我可以共享代码,但是非常简单。