具有宁静的Primfaces 6.2(数据表问题)

时间:2019-02-04 11:45:24

标签: javascript java primefaces xhtml

标题##我们在JSF2.1.0中使用Primefaces 6.2。

我们在xhtml中的数据表定义如下。

<p:dataTable id="dataTable" var="datatable" style="min-height:450px !important;"
             widgetVar="searchDataTable" resizableColumns="false" paginatorAlwaysVisible="false"
             styleClass="ui-datatable-ver-scroll datatable-wrap-column" 
             filteredValue="#{advSearchAction.filteredSearchList}"
             value="#advSearchAction.searchValueBeanLazyDataModel}" paginator="true" 
             rowKey="#{datatable.ROWID}" filterEvent="change" rows="#{sessionScope['SRGRID_ROWS']}"
             lazy="true" selection="#{advSearchAction.selectedRecordArr}" 
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
             rowsPerPageTemplate="# {commonmsg.searchDataTable$rowsPerPageTemplate}" 
             paginatorPosition="bottom">

这里所有数据都已成功填充到数据表中,如果我们选择数据行,则会抛出空指针异常。

查看下面的错误。

  

15:15:10,441信息[javax.enterprise.resource.webcontainer.jsf.context](http-localhost-127.0.0.1-85-2)java.lang.NullPointerException:java.lang.NullPointerException       在com.iii.orn11j.advsearch.SearchValueBeanLazyDataModel.getRowData(SearchValueBeanLazyDataModel.java:67)[类:]       在com.iii.orn11j.advsearch.SearchValueBeanLazyDataModel.getRowData(SearchValueBeanLazyDataModel.java:1)[类:]       在org.primefaces.component.datatable.DataTable.getRowData(DataTable.java:1445)[primefaces-6.2.jar:]       在org.primefaces.component.datatable.feature.SelectionFeature.decodeSingleSelection(SelectionFeature.java:75)上[类:]       在org.primefaces.component.datatable.feature.SelectionFeature.decode(SelectionFeature.java:57)上[类:]       在org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:71)上[primefaces-6.2.jar:]       在javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)[jboss-jsf-api_2.1_spec-2.0.0.Final.jar:2.0.0.Final]

我的 SearchValueLazyBeanDataModel 方法调用如下

@Override
public SearchValueBean getRowData(String rowKey) {
    final List<SearchValueBean> rows = (List<SearchValueBean>)getWrappedData();

    for (SearchValueBean SearchValueBean : rows) {
        if (SearchValueBean.getROWID().equals(rowKey))
            return SearchValueBean;
    }

    return null;
}

从xhtml传递的rowid即将到来,并且在SelectionFeature类的encodeSingleSelection()方法期间,datatable的getRowData()方法返回null,并且从调用部分抛出NullPointerException。

注意:我们已经定制了primefaces jar和的SelectionFeature.java 下面是调试时我代码的错误部分。

void decodeSingleSelection(DataTable table, String selection) {
    if (ComponentUtils.isValueBlank(selection)) {
        table.setSelection(null);
    } else {
        table.setSelection(table.getRowData(selection));
    }
}

任何人都可以在这方面帮助我。

0 个答案:

没有答案