无法将var插入Primeface数据表selectManyCheckbox的rowKey中

时间:2019-06-26 17:33:07

标签: primefaces datatable

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)SelectedEventonRowSelect()返回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}"
                             />

0 个答案:

没有答案