当变量声明为Long时,Primefaces选定的行为null

Jåc*_*cob 4 java jsf primefaces jsf-2

我在ManagedBean中有以下内容

private Employee selectedEmployee; // with getter and setter    

public void onRowSelect(SelectEvent event) {

System.out.println("selected employee "+selectedEmployee.getEmployeeNumber());

}
Run Code Online (Sandbox Code Playgroud)

我的问题是Employee实体类,如果我做employeeNumberStringLong,我正在为null selectedEmployeeonRowSelectManagedBean的方法

员工实体

private String employeeNumber; // this works  

private Long employeeNumber; // this doesn't work
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?

JSF代码供选择

    <p:dataTable id="dataTable" var="emp" lazy="true"
value="#{myMB.lazyModel}" styleClass="userDataTableStyle"
paginator="true" paginatorPosition="bottom" rows="5"
selection="#{myMB.selectedEmployee}">

    <p:ajax event="rowSelectRadio" listener="#{myMB.onRowSelect}"
update=":myform:details" />
Run Code Online (Sandbox Code Playgroud)

par*_*lov 5

在使用选择时,dataTable您应该提供rowKey用于查找列表中选择的实际对象的属性。这应该是列表中所有数据唯一的属性(可能是数据库中的主键):

rowKey="#{emp.employeeNumber}"
Run Code Online (Sandbox Code Playgroud)

我不知道这与 String 一起工作的真正原因。也许这是你toString()方法的一部分?


小智 5

  1. 您必须在rowKey字段中包含有效主键.
  2. 您必须将其包含在dataTable表单中.

否则返回集(null).