【问题标题】:How to show Numbers in Vaadin Text- or NumberFields formatted in Currency Style?如何以货币样式格式显示 Vaadin 文本或 NumberFields 中的数字?
【发布时间】:2022-07-28 17:06:52
【问题描述】:

我只想要一个可编辑的字段,将数字显示为类似货币

1.444.444,90 

我已经检查了NumeralFieldFormatter,但是当我将它与构造函数或生成器一起使用时。没关系,它总是给我 20000.0 之类的东西

NumeralFieldFormatter currencyOne = new NumeralFieldFormatter.Builder()
                .decimalMark(",")
                .decimalScale(2)
                .delimiter(".")
                .thousandsGroupStyle(NumeralFieldFormatter.ThousandsGroupStyle.THOUSAND)
                .build();
currencyOne.extend(textfield);

我做错了什么或者vaadin有更好的可能性吗?这么大的框架怎么可能没有内置的货币,或者我根本找不到它?

提前致谢

【问题讨论】:

  • 您看过 NumberField 吗? vaadin.com/docs/latest/components/number-field
  • 是的,当然可以,但是我怎样才能在 BigDecimal 中获得千位分隔符?那里显示的示例是 948205817.472950487 但我需要 948.205.817,47
  • 哦,是的,你是对的!你在使用活页夹吗?在那里你可以在转换器中格式化和解析它
  • 不,我没有。也许您可以指定您的意思的活页夹?什么转换器?

标签: java spring-boot vaadin


【解决方案1】:

您可以将 Binder 与转换器一起使用:

public class HelloWorldView extends VerticalLayout {

    private final DecimalFormat decimalFormate = new DecimalFormat("###,###,###.00");

    public HelloWorldView() {
        Binder<Person> binder = new Binder<>(Person.class);

        TextField name = new TextField("Name");
        binder.forField(name)
                .bind("name");

        TextField salary = new TextField("Salary");
        binder.forField(salary)
                .withConverter(new Converter<String, BigDecimal>() {
                    @Override
                    public Result<BigDecimal> convertToModel(String value, ValueContext context) {
                        if (value == null || value.length() == 0) {
                            return Result.ok(new BigDecimal(0));
                        } else {
                            return Result.ok(new BigDecimal(value));
                        }
                    }

                    @Override
                    public String convertToPresentation(BigDecimal value, ValueContext context) {
                        if (value == null) {
                            return "";
                        } else {
                            return decimalFormate.format(value);
                        }
                    }
                })
                .bind("salary");

        binder.setBean(new Person());

        add(name, salary);
    }

请在此处找到整个示例: https://github.com/simasch/vaadin-formatting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    相关资源
    最近更新 更多