【问题标题】:Primefaces selected row is null when variable is declared as Long当变量声明为 Long 时,Primefaces 所选行为空
【发布时间】:2013-02-21 02:48:33
【问题描述】:

我在 ManagedBean 中有以下内容

private Employee selectedEmployee; // with getter and setter    

public void onRowSelect(SelectEvent event) {

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

}

如果我将employeeNumberString 变为Long,我的问题是在Employee 实体类中,我在ManagedBean 的onRowSelect 方法中得到selectedEmployee 的空值

员工实体

private String employeeNumber; // this works  

private Long employeeNumber; // this doesn't work

这可能是什么原因?

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

【问题讨论】:

  • 您应该在使用选择时在 dataTable 中提供rowKey 属性。尝试添加rowKey="#{emp.employeeNumber}" 或其他一些独特的字段,看看发生了什么。
  • @partlov 我已将rowKey="#{emp.employeeNumber}" 添加到&lt;p:ajax,但这并没有解决问题。
  • 不是p:ajax,那里不存在该属性。添加到p:dataTable
  • @partlov 是的,添加到p:dataTable 解决了这个问题。为什么当employeeNumber 是字符串时这会起作用?如果您可以添加作为答案,我将很乐意接受。非常感谢。

标签: java jsf jsf-2 primefaces


【解决方案1】:
  1. rowKey 字段中必须有一个有效的主键。
  2. 您必须将dataTable 包含在表单中。

否则返回集合(null)。

【讨论】:

  • > 您必须将 dataTable 包含在一个表单中 成功了,谢谢!
【解决方案2】:

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

rowKey="#{emp.employeeNumber}"

我不知道这与 String 一起使用的实际原因。也许那是您的toString() 方法的一部分?

【讨论】:

  • 这不是'tostring()`的一部分
猜你喜欢
  • 2014-12-26
  • 2016-12-27
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2023-02-23
  • 1970-01-01
  • 2012-11-14
  • 2013-11-28
相关资源
最近更新 更多