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