gpt4 book ai didi

java - 如何在 vaadin 中格式化表值?

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:59 25 4
gpt4 key购买 nike

如果我有一个具有 BigDecimal 属性的对象,我想将其显示在具有特定格式的 Table 中:2 个分数,以及一个“+”或“-” "按金额签字。

例如:+10.50, -3.20

这如何在 vaadin 表中实现?有一个方法 table.setConverter(..),但这实际上会强制在 BigDecimal.classString.class 之间进行转换>。我所追求的只是一个以不同方式显示对象数据的 View 格式化程序。

最佳答案

在使用 Table.formatPropertValue() 时格式化表列是一个可行的选择,我强烈反对在使用 Vaadin 7 时使用此方法。formatPropertValue()是旧的 Vaadin 6 格式化表值的方式。为了向下兼容,此方法在 Vaadin 7 中仍然可用。使用此方法在几个方面存在问题:

  • 它不是类型安全的。因为你只得到一个 Property<?>作为参数,您首先必须检查属性值的具体类型。
  • 您必须仅从 Table 继承以调整一列或多列的格式。类继承绝对是针对特定用例调整类行为的错误方法。如果您有不止一个这样的情况,您将最终实现一堆 Table 子类,这些子类以后不能轻易互换。
  • 您将转换代码(BigDecimal 到 String)硬连接到某些 UI 组件的具体实现。这不利于重复使用。如果您需要在其他地方进行转换,比如在标签上显示 BigDecimal 时怎么办?您必须复制此代码或以某种方式将其提取到单独的类或方法中。

最后一点正是 Vaadin 7 为您所做的:将转换逻辑与某些具体的 UI 组件分开。这就是com.vaadin.data.util.converter.Converter界面是为了。因此,OP 在他/她的第一个假设中是完全正确的:Table.setConverter()是使用 Vaadin 7 的方式。转换器是类型安全的并且允许关注点分离。

反对可以用Table.setConverter()设置的Converter在这种情况下,仅从 BigDecimal 转换为 String 是不合理的。 Table.formatPropertValue()没有做任何不同的事情——它也转换为字符串。但这是显而易见的,Table 在其列中只显示 String 数据。事实上,Table 的默认行为是调用 toString() Property 上的方法它无法自行转换的值类型。

有关转换器的使用,请参阅 section 9.2.3 of the Book of Vaadin .

关于java - 如何在 vaadin 中格式化表值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com