mem*_*und 5 java vaadin vaadin7
如果我有一个具有BigDecimal属性的对象,我想Table用特定格式显示它:2个分数,并根据数量使用"+"或" - "符号.
如:+10.50,-3.20
如何在vaadin表中实现这一目标?有一种方法table.setConverter(..),但这实际上会强制在例如a BigDecimal.class和a 之间进行转换String.class.我更喜欢的只是一个视图格式化程序,它只是以不同的方式显示对象数据.
虽然使用Table.formatPropertValue()格式化表列是一个可行的选项,但我强烈反对在使用Vaadin 7时使用此方法.formatPropertValue()是旧的Vaadin 6格式化表值的方法.Vaadin 7中仍然可以使用此方法向下兼容.使用此方法在以下几个方面存在问题:
Property<?>参数,因此首先必须检查属性值的具体类型.最后一点正是Vaadin 7为您所做的:保持转换逻辑与某个具体的UI组件分开.这就是com.vaadin.data.util.converter.Converter界面的用途.因此,OP在他/她的第一个假设中是完全正确的:Table.setConverter()是与Vaadin 7一起使用的方式.转换器是类型安全的,允许分离关注点.
Table.setConverter()在这种情况下,可以设置只能从BigDecimal转换为String 的转换器的异议是不合理的.Table.formatPropertValue()没有做任何不同的事情 - 它也会转换为String.但很明显,Table不会在其列中显示除String数据之外的任何内容.实际上,Table的默认行为是调用无法自行转换的值类型的toString()方法Property.
有关使用转换器的信息,请参阅Book of Vaadin的9.2.3节.
Override受保护的方法Table.formatPropertValue():
public class My_table
extends Table
{
@Override
protected String formatPropertyValue(final Object a_row_id,
final Object a_col_id,
final Property<?> a_property)
{
if (a_property.getType() == BigDecimal.class
&& null != a_property.getValue())
{
return "formatted-value";
}
return super.formatPropertyValue(a_row_id, a_col_id, a_property);
}
}
Run Code Online (Sandbox Code Playgroud)
参见Book of Vaadin第5.16.6节.格式化表列.