【问题标题】:vaadin 8 grid with column of Double datatype based on Localevaadin 8 网格与基于区域设置的 Double 数据类型列
【发布时间】:2019-04-22 03:59:55
【问题描述】:

我正在尝试填充 Vaadin 8 Grid,其中一列的类型为 double。我通过将数据与 bean 组合将其加载到表中。我是通过以下方式做到的,

任务 bean:

public class Tasks{
    private int id;
    private Double duration;

    public StakeholderTasks(int i, String string) {
        this.id = id;
        this.taskName=taskName;
        // TODO Auto-generated constructor stub
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public Double getDuration() {
        return duration;
    }
    public void setDuration(Double duration) {
        this.duration = duration;
    }
}

TasksImpl:

public class stakeholderImpl extends CustomComponent {
    private Grid < Tasks > grid1;
    private Binder < Tasks > binder = new Binder < > (Tasks.class);
    cmpy = datastoreinstance.updateTaskList();
    provider1 = new ListDataProvider < > (cmpy);
    grid1 = new Grid < > ();
    grid1.addColumn(Tasks::getDuration);
    grid1.asSingleSelect().addValueChangeListener(event -> {

      form.setVisible(false);

      window = createWindow(window,
       ((MainUI)(UI.getCurrent())).getLanguageMessage("general.addnewtask"),
       event.getValue(), "EDIT", form);
     }
     catch (ClassNotFoundException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     } catch (SQLException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }

 }

});

binder.forField(duration).asRequired(((MainUI)(UI.getCurrent())).getLanguageMessage("general.required"))
      .withValidator(new RegexpValidator(((MainUI)(UI.getCurrent())).getLanguageMessage("general.numerror"), DBConstants.regex))
      .bind(taskdetails -> nf_out.format(stakeholders.getDuration()),
      (taskdetails, formValue) -> 
      {
          NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY);
          double val = 0 d;
          try {
             val = nf_in.parse(formValue).doubleValue();
             taskdetails.setDuration(val);
          } catch (ParseException e) {
             // TODO Auto-generated catch block
             e.printStackTrace();
      }
  });
}

当我单击网格中的一行时,然后从该行中获取值,加载一个表单,然后保存后,在网格中显示值。我在活页夹中所做的持续时间是根据 LOCALE.GERMANY 验证 double 的值,否则使用 regex(regex= "[0-9]+([.,][0-9]{1,2})?";) 进行验证

我面临的问题是:

  • 对于网格中的十进制表示法,我是 . 而不是 ,(在数据库中它有 ,
  • 当我单击网格时,Duration 列会使零的数量增加一倍。例如:如果单击网格中的值为 10.0,则该值将更改为 10000.00 或 1000.00。有没有办法加载基于德国语言环境的网格?

  • 我知道我没有正确处理这个问题。有一个更好的方法吗?有人可以指导我完成这个。我现在正在学习 Vaadin,但无法正常工作。

【问题讨论】:

    标签: java java-8 vaadin vaadin8 vaadin-grid


    【解决方案1】:

    另一种简单的方法是您可以使用框架的StringToDoubleConverter。默认情况下,它使用NumberFormat.getNumberInstance(locale) 作为数字格式。如果您想要本地默认数字格式以外的其他内容,可以扩展 StringToDoubleConverter 并覆盖 getFormat 方法以返回自定义的NumberFormat

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多