Primefaces 选定的行 id == null
Primefaces slected row id == null
我有一个可以列出餐厅对象的工作数据table。
我想 delete/edite selected 的但是当我 select 一个时出现以下异常:
org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!
这里是 table:
<h:form id="restaurantForm">
<p:dataTable var="restaurant"
value="#{restaurantLazyBean.lazyDataModel}" paginator="true"
rows="10" rowsPerPageTemplate="5,10,50" id="carTable" lazy="true"
selectionMode="single" selection="#{RestaurantEditBean.selected}"
rowKey="#{restaurant.id}"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:ajax event="rowSelect"
listener="#{RestaurantEditBean.onRowSelect()}"/>
<p:column headerText="ID">
<h:outputText value="#{restaurant.id}" />
</p:column>
</p:dataTable>
</h:form>
现在所有 ID 都出现在 table 中,但在 selection 中出现异常。
我尝试根据 primefaces 示例做所有事情。但是他们连rowKey属性都没有。
这是相关的 bean。
@Named("RestaurantEditBean")
@ViewScoped
@EJB(name = "ejb.RestaurantService", beanInterface = RestaurantService.class)
public class RestaurantEditBean {
@EJB
private RestaurantService restaurantService;
private RestaurantDTO selected;
public void onRowSelect(SelectEvent event) {
selected = ((RestaurantDTO) event.getObject());
}
public RestaurantService getRestaurantService() {
return restaurantService;
}
public void setRestaurantService(RestaurantService restaurantService) {
this.restaurantService = restaurantService;
}
public RestaurantDTO getSelected() {
return selected;
}
public void setSelected(RestaurantDTO selected) {
this.selected = selected;
}
}
Primefaces:5.3
JSF:2.2
我发现我犯了一个严重的错误。
在我的 LazyDataModel 中,我不得不重写一个函数。
@Override
public RestaurantDTO getRowData(String rowKey) {
Long id = Long.parseLong(rowKey);
return restaurantService.findById(id);
}
问题是由前一个 Long.getLong(rowKey)
引起的,那个返回 null。
我有一个可以列出餐厅对象的工作数据table。 我想 delete/edite selected 的但是当我 select 一个时出现以下异常:
org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null!
这里是 table:
<h:form id="restaurantForm">
<p:dataTable var="restaurant"
value="#{restaurantLazyBean.lazyDataModel}" paginator="true"
rows="10" rowsPerPageTemplate="5,10,50" id="carTable" lazy="true"
selectionMode="single" selection="#{RestaurantEditBean.selected}"
rowKey="#{restaurant.id}"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}">
<p:ajax event="rowSelect"
listener="#{RestaurantEditBean.onRowSelect()}"/>
<p:column headerText="ID">
<h:outputText value="#{restaurant.id}" />
</p:column>
</p:dataTable>
</h:form>
现在所有 ID 都出现在 table 中,但在 selection 中出现异常。 我尝试根据 primefaces 示例做所有事情。但是他们连rowKey属性都没有。
这是相关的 bean。
@Named("RestaurantEditBean")
@ViewScoped
@EJB(name = "ejb.RestaurantService", beanInterface = RestaurantService.class)
public class RestaurantEditBean {
@EJB
private RestaurantService restaurantService;
private RestaurantDTO selected;
public void onRowSelect(SelectEvent event) {
selected = ((RestaurantDTO) event.getObject());
}
public RestaurantService getRestaurantService() {
return restaurantService;
}
public void setRestaurantService(RestaurantService restaurantService) {
this.restaurantService = restaurantService;
}
public RestaurantDTO getSelected() {
return selected;
}
public void setSelected(RestaurantDTO selected) {
this.selected = selected;
}
}
Primefaces:5.3 JSF:2.2
我发现我犯了一个严重的错误。 在我的 LazyDataModel 中,我不得不重写一个函数。
@Override
public RestaurantDTO getRowData(String rowKey) {
Long id = Long.parseLong(rowKey);
return restaurantService.findById(id);
}
问题是由前一个 Long.getLong(rowKey)
引起的,那个返回 null。