редактор строк сетки vaadin меняет порядок столбцов - PullRequest
0 голосов
/ 26 января 2019

У меня есть простая сущность

 public class Vulnerability{
  private String name;
  private int probability;
  private int damage;
 }

и сетка с редактором строк

Grid<Vulnerability> vulnerabilityGrid = new Grid<Vulnerability>(Vulnerability.class);
vulnerabilityGrid.setColumns("name", "probability", "damage");
Grid.Column nameColumn = vulnerabilityGrid.getColumn("name");
Grid.Column probabilityColumn = vulnerabilityGrid.getColumn("damage");
Grid.Column damageColumn = vulnerabilityGrid.getColumn("probability");

код подшивки с привязкой к полям

Binder<Vulnerability> binderVulnerability = new Binder<Vulnerability>();
TextField nameTextFieldGrid = new TextField(), damageTextFieldGrid = new TextField(), probabilityTextFieldGrid = new TextField();
Binder.Binding<Vulnerability, Integer> probabilityBind = binderVulnerability.forField(probabilityTextFieldGrid).withNullRepresentation("").withConverter(new StringToIntegerConverter(Integer.valueOf(0), "integers only")).bind(Vulnerability::getProbability, Vulnerability::setProbability);
Binder.Binding<Vulnerability, Integer> damageBind = binderVulnerability.forField(damageTextFieldGrid).withNullRepresentation("") .withConverter(new StringToIntegerConverter(Integer.valueOf(0), "integers only")).bind(Vulnerability::getDamage, Vulnerability::setDamage);

nameColumn.setEditorBinding(nameBind);
probabilityColumn.setEditorBinding(probabilityBind);
damageColumn.setEditorBinding(damageBind);

И проблема спорядок столбцов, когда я нажимаю на строку, и редактор активируется, я получаю редактор для поля повреждения на вероятностной позиции и так далее.grid

editor

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 26 января 2019

Смотрите ваш код здесь

Grid.Column probabilityColumn = vulnerabilityGrid.getColumn("damage");
Grid.Column damageColumn = vulnerabilityGrid.getColumn("probability");

Вы получаете столбец «повреждения» для ссылки probabilityColumn и устанавливаете его с привязкой, которая имеет геттер и сеттер для вероятности, следующим образом.

Binder.Binding<Vulnerability, Integer> probabilityBind = binderVulnerability.forField(probabilityTextFieldGrid).withNullRepresentation("").withConverter(new StringToIntegerConverter(Integer.valueOf(0), "integers only")).bind(Vulnerability::getProbability, Vulnerability::setProbability);

probabilityColumn.setEditorBinding(probabilityBind);

С другой колонкой вы делаете наоборот. Так что работает как закодировано. Как видите, API в Vaadin Grid и Binder допускает такую ​​асимметрию, поскольку геттеры и сеттеры могут быть определены индивидуально, что в вашем случае является ошибкой программирования, но в других случаях вы можете использовать эту функцию.

...