Невозможно вставить var в rowKey в файле выбора данных Primeface selectManyCheckbox - PullRequest
0 голосов
/ 26 июня 2019

JAVA EE 7
Версия Primefaces: 7
Версия JFS: 2.2

Мне нужен набор данных свозможность выбора нескольких строк.
Я использовал Primefaces datatable - Selection , но я столкнулся с проблемой, которую мне трудно решить.
При установке rowKey среда IDE не разрешаетvar переменная.Он выдвигает на первый план это и только предлагает объявить это как внешнюю переменную!

Один из обходных путей должен был генерировать rowKey в bean-компоненте:

public String getKey() {
        // larger code for debugging purpose
        String number = ((int) (Math.random()*1000)) + "";
        this.key = number;
        return key;
}

С этим изменением он рисует таблицу без ошибок.Но когда я пытаюсь получить значение события с помощью onRowSelect(), возвращается ноль, и я думаю, что это из-за rowKey.

Итак, мои вопросы:
a) Почему rowKey не подтверждает установленную переменную, но принимает bean-компонент и функцию-получатель?

b) Что может быть причиной для SelectedEvent возврата нуля при onRowSelect()?

Просмотр XTML

<p:dataTable id="checkboxDT" var="trainee" value="#{trainingPlanBean.trainees}" selection="#{trainingPlanBean.selectedTrainees}" rowKey="#{trainee.id}" style="margin-bottom:0">
  <p:ajax event="rowSelectCheckbox" update="" listener="#{trainingPlanBean.printPlan}" />
  <p:ajax event="rowSelect" update="" listener="#{trainingPlanBean.onRowSelect}" />
  <f:facet name="header">
    Checkbox
  </f:facet>
  <p:column selectionMode="multiple" style="width:16px;text-align:center" />
  <p:column headerText="#{msg.IDNUMBER}">
    <h:outputText value="#{trainee.id}" />
  </p:column>
  <p:column headerText="#{msg.NAME}">
    <h:outputText value="#{trainee.name}" />
  </p:column>
  <p:column headerText="#{msg.EMAIL}">
    <h:outputText value="#{trainee.email}" />
  </p:column>
  <p:column headerText="#{msg.INTERESTED}">
    <h:outputText value="#{trainee.interested}" />
  </p:column>
</p:dataTable>

Боб Для простоты удалено большинство методов

@Named
@ViewScoped
public class TrainingPlanBean implements Serializable {
  private String title;
  private String motive;
  private String interval;
  private String courseId;
  private int duration;
  private List < TrainingSessionDto > trainingSession;
  private List < UsersDto > trainees;
  private List < UsersDto > selectedTrainees;
  private String key;

  public void onRowSelect(SelectEvent event) {
    UsersDto usersDto = ((UsersDto) event.getObject());
  }

  public void onRowUnselect(UnselectEvent event) {
    System.out.println(((UsersDto) event.getObject()).getId());
  }

  public String getKey() {
    String number = ((int)(Math.random() * 1000)) + "";
    this.key = number;
    return key;
  }

  public void setKey(String key) {
    this.key = key;
  }
}

РЕДАКТИРОВАНИЕ ДОБАВЛЕНО
Если закрыть тег p:datatable, он распознает trainee как переменную:

<p:dataTable id="checkboxDT" var="trainee"
                             value="#{trainingPlanBean.trainees}"
                             selection="#{trainingPlanBean.selectedTrainees}"
                             rowKey="#{trainee.id}"
                             />
...