сетка vaadin 8 с столбцом типа данных Double на основе локали - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь заполнить Vaadin 8 Grid, и один столбец имеет тип double.Я загружаю данные в таблицу, комбинируя их с бином.Я сделал это следующим образом,

Задачи 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, а также проверить с помощью regex(regex= "[0-9]+([.,][0-9]{1,2})?";)

Проблемы, с которыми я сталкиваюсь:

  • Яgettign . вместо , для десятичных обозначений в сетке (в базе данных она имеет ,)
  • Когда я щелкаю по сетке, столбец Duration удваивает число нулей.Например, если при щелчке по нему значение в сетке равно 10.0, значение меняется на 10000.00 или 1000.00.Есть ли способ загрузить сетку на основе локали для Германии?

  • Я знаю, что я не обработал это правильно.Есть лучший способ сделать это?Может ли кто-то просто провести меня через это.Сейчас я изучаю Ваадин и не могу заставить его работать должным образом.

1 Ответ

0 голосов
/ 25 ноября 2018

Один альтернативный и простой подход заключается в том, что вместо этого вы можете использовать StringToDoubleConverter платформы.По умолчанию он использует NumberFormat.getNumberInstance (locale) для числового формата.Если вы хотите что-то другое, чем числовой формат по умолчанию вашего локального, вы можете расширить StringToDoubleConverter и переопределить метод getFormat для возврата настроенного NumberFormat .

...