vaadin grid-редактор строк меняет порядок столбцов

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

 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);

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

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

1 ответ

Решение

Посмотрите на свой код здесь

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 допускает такую ​​асимметрию, поскольку геттеры и сеттеры могут быть определены индивидуально, что в вашем случае является ошибкой программирования, но в других случаях вы можете использовать эту функцию.

Другие вопросы по тегам