我有一个表格,其中源项目的属性需要通过自定义格式格式化。
源属性(我自己的bean)是Integer
,但需要格式化为类似于货币的格式。
我尝试实现自己的PropertyFormatter
,并在FieldFactory.createField
内为此表单设置
TextField tf = new TextField("Price");
tf.setPropertyDataSource(new MyPriceFormatter());
return tf;
但是从日志中可以看出,只调用format()
方法。但是从不使用parse()
方法,并且永远不会调用setValue
我的代码出了什么问题?如何使用自定义PropertyFomatter表单?或者如何为表单字段添加自定义格式?
经过一些调查后,我发现有一些东西只是用一个新的MethodProperty
数据源替换了我的格式化程序。所以我实现了我自己的PriceField
,并覆盖了setPropertyDataSource
,以解决这种情况。顺便说一句,它看起来像是hacky,我还在寻找另一种方式
答案 0 :(得分:1)
我也经历过这个问题并以另一种方式解决了。实际上我还必须用货币格式化文本字段: - )
问题是,在FormFieldFactory中创建字段时,PropertyFormatter中的数据源为null。您可以在调用FormFieldFactory之后在字段上设置数据源:
addCountryRatesForm.setFormFieldFactory(new MyFormFieldFactory());
Field internationalRate = addCountryRatesForm.getField("internationalRate");
internationalRate.setPropertyDataSource(new CurrencyFormatter("#0.00 ", currency, internationalRate.getPropertyDataSource()));
不幸的是,Vaadin无法创建一个设置自己的格式化程序的TextField。