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