Java 惰性数据表';s行选择事件对象始终为空

Java 惰性数据表';s行选择事件对象始终为空,java,jsf,primefaces,nullpointerexception,jsf-2.2,Java,Jsf,Primefaces,Nullpointerexception,Jsf 2.2,我试图使用p:datatable列出以前的搜索结果,然后选择一行以显示在showcase对话框中(如showcase中所示)。 但是ajax事件“rowSelect”的SelectEvent.getObject()总是返回null,并且从不选择当前行 这是堆栈跟踪: Caused by: java.lang.NullPointerException at com.gestion.projet.web.jsf.ProjetComponentImpl.onRowSelect(ProjetCo

我试图使用
p:datatable
列出以前的搜索结果,然后选择一行以显示在showcase对话框中(如showcase中所示)。 但是ajax事件“rowSelect”的
SelectEvent.getObject()
总是返回
null
,并且从不选择当前行

这是堆栈跟踪:

Caused by: java.lang.NullPointerException
    at com.gestion.projet.web.jsf.ProjetComponentImpl.onRowSelect(ProjetComponentImpl.java:92)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy58.onRowSelect(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy10.onRowSelect(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.el.parser.AstValue.invoke(AstValue.java:234)
    ... 38 more
这是我的xhtml文件:

<p:dataTable var="current" value="#{ProjetComponent.lazyModel}" 
                paginator="true" rows="10" 
                paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                rowsPerPageTemplate="5,10,15" selectionMode="single"
                selection="#{ProjetComponent.projet}" id="projetTable" lazy="true">
                <p:ajax event="rowSelect" listener="#{ProjetComponent.onRowSelect}"
                    update=":form:projetDetail" oncomplete="PF('projetDialog').show()" />
                <p:column headerText="Id" sortBy="#{current.idprojet}" filterBy="#{current.idprojet}">
                    <h:outputText value="#{current.idprojet}" />
                </p:column>
                <p:column headerText="Nom" sortBy="#{current.nomprojet}"
                    filterBy="#{current.nomprojet}">
                    <h:outputText value="#{current.nomprojet}" />
                </p:column>

            </p:dataTable>
这是LazyProjetData模型:

public class LazyProjetDataModel extends LazyDataModel<Projet>  {
    private static final long serialVersionUID = 1L;
    private List<Projet> datasource;

    public LazyProjetDataModel(List<Projet> datasource) {
        this.datasource = datasource;
    }

    @Override
    public Projet getRowData(String rowKey) {
        for(Projet projet : datasource) {
            if(projet.getIdprojet().equals(rowKey))
                return projet;
        }

        return null;
    }

    @Override
    public Object getRowKey(Projet projet) {
        return projet.getIdprojet();
    }
    @Override
    public List<Projet> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        List<Projet> data = new ArrayList<Projet>();

        //filter
        for(Projet car : datasource) {
            boolean match = true;

            if (filters != null) {
                for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
                    try {
                        String filterProperty = it.next();
                        Object filterValue = filters.get(filterProperty);
                        String fieldValue = String.valueOf(car.getClass().getField(filterProperty).get(car));

                        if(filterValue == null || fieldValue.startsWith(filterValue.toString())) {
                            match = true;
                    }
                    else {
                            match = false;
                            break;
                        }
                    } catch(Exception e) {
                        match = false;
                    }
                }
            }

            if(match) {
                data.add(car);
            }
        }

        //sort
        if(sortField != null) {
       //     Collections.sort(data, new LazySorter(sortField, sortOrder));
        }

        //rowCount
        int dataSize = data.size();
        this.setRowCount(dataSize);

        //paginate
        if(dataSize > pageSize) {
            try {
                return data.subList(first, first + pageSize);
            }
            catch(IndexOutOfBoundsException e) {
                return data.subList(first, first + (dataSize % pageSize));
            }
        }
        else {
            return data;
        }
    }
}
公共类LazyProjetDataModel扩展了LazyDataModel{
私有静态最终长serialVersionUID=1L;
私有列表数据源;
公共LazyProjetDataModel(列表数据源){
this.datasource=数据源;
}
@凌驾
公共项目getRowData(字符串rowKey){
for(Projet Projet:datasource){
if(projet.getIdprojet().equals(rowKey))
返回项目;
}
返回null;
}
@凌驾
公共对象getRowKey(Projet Projet){
返回projet.getIdprojet();
}
@凌驾
公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
列表数据=新的ArrayList();
//滤器
for(Projet汽车:数据源){
布尔匹配=真;
if(过滤器!=null){
for(Iterator it=filters.keySet().Iterator();it.hasNext();){
试一试{
String filterProperty=it.next();
对象filterValue=filters.get(filterProperty);
String fieldValue=String.valueOf(car.getClass().getField(filterProperty.get(car));
if(filterValue==null | | fieldValue.startsWith(filterValue.toString()){
匹配=真;
}
否则{
匹配=假;
打破
}
}捕获(例外e){
匹配=假;
}
}
}
如果(匹配){
数据。添加(car);
}
}
//分类
if(sortField!=null){
//分类(数据,新懒散分类机(sortField,sortOrder));
}
//行数
int dataSize=data.size();
此.setRowCount(数据大小);
//分页
如果(数据大小>页面大小){
试一试{
返回数据。子列表(第一,第一+页面大小);
}
catch(IndexOutOfBoundsException e){
返回数据。子列表(第一,第一+(数据大小%pageSize));
}
}
否则{
返回数据;
}
}
}
这是datatable的屏幕截图: 这是我选择一行时得到的结果: Hy

您的错误是:

Caused by: java.lang.NullPointerException
at com.gestion.projet.web.jsf.ProjetComponentImpl.onRowSelect(ProjetComponentImpl.java:92)
是由

((Projet) event.getObject()).getIdprojet().toString()
您的对象projet不为空。空对象是idProject。
转到您的项目并验证他是否已将id设置为值

您的问题是此方法返回空值

 @Override
    public Projet getRowData(String rowKey) {
        for(Projet projet : datasource) {
            if(projet.getIdprojet().equals(rowKey))
                return projet;
        }

        return null;
    }

删除它并尝试

id valorizedvalorized是什么意思:is not nul的值不为null。执行该操作:更改以下内容:((Projet)event.getObject()).getIdprojet().toString();with:Projet j=(Projet)event.getObject();System.out.println(p.getIdprojet());p、 getIdprojet().toString();把你的堆栈跟踪错误改成什么?我试图通过nomProjet来改变它,但同样的问题你可以阅读我写的东西:Projet j=(Projet)event.getObject();System.out.println(j.getIdprojet());p、 getIdprojet().toString();我在这一行System.out.println(j.getIdprojet())上有一个nullpointer异常;但是getRowData必须有一个返回语句No delete it(删除所有methode getRowData)try i没有任何堆栈跟踪异常,但是问题仍然存在,我再次得到第二个屏幕截图不要删除methode中的代码,删除所有methode i我非常感谢,但是选择的问题仍然存在,但没有异常
 @Override
    public Projet getRowData(String rowKey) {
        for(Projet projet : datasource) {
            if(projet.getIdprojet().equals(rowKey))
                return projet;
        }

        return null;
    }