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}"
/>