JAVA EE 7
Primefaces版本: 7
JFS版本: 2.2
我需要一个可以选择几行的数据表。
我使用了Primefaces datatable - Selection,但遇到了一个难以解决的问题。
设置rowKey时,IDE不会解析var
变量。它突出显示它,仅建议将其声明为外部变量!
一种解决方法是在bean中生成rowKey:
public String getKey() {
// larger code for debugging purpose
String number = ((int) (Math.random()*1000)) + "";
this.key = number;
return key;
}
onRowSelect()
获取事件值时,它返回null,这是因为rowKey。
所以我的问题是:
a)为什么rowKey不承认已设置的var,但接受bean和getter函数?
b)SelectedEvent
在onRowSelect()
返回null的可能原因是什么?
查看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>
Bean 为简单起见,删除了大多数方法
@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}"
/>