Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf p:数据表选择为空_Jsf_Jsf 2_Primefaces_Datatable - Fatal编程技术网

Jsf p:数据表选择为空

Jsf p:数据表选择为空,jsf,jsf-2,primefaces,datatable,Jsf,Jsf 2,Primefaces,Datatable,我试图使用primefaces 4.0的可选datatable,但所选对象始终为空。 我已经厌倦了添加rowKeylike和said,但仍然得到null 这是我的页面: <p:dataTable id="appDetailTable" var="appDetail" value="#{newAppraiseBean.appDetailDataModel}" paginator="true" rows="5" paginatorPosition="bottom

我试图使用primefaces 4.0的可选datatable,但所选对象始终为空。 我已经厌倦了添加
rowKey
like和said,但仍然得到null

这是我的页面

<p:dataTable id="appDetailTable" var="appDetail"  value="#{newAppraiseBean.appDetailDataModel}"  
             paginator="true" rows="5" paginatorPosition="bottom" selection="#{newAppraiseBean.selectedAppDetail}" 
             rowKey="#{appDetail.appraiseDetailID}" selectionMode="single">
  <p:ajax event="rowSelect" listener="#{newAppraiseBean.modifyAppDetail()}" oncomplete="newAppDlg.show();" update=":newAppraiseForm:newAppDetail"/>   
</p:dataTable>
数据模型:

private class AppraiseDetailDataModel extends ListDataModel<Appraisedetail> implements SelectableDataModel<Appraisedetail> {

    public AppraiseDetailDataModel(List<Appraisedetail> list) {
        super(list);
    }

    @Override
    public Object getRowKey(Appraisedetail t) {
        return t.getAppraiseDetailID();
    }

    @Override
    public Appraisedetail getRowData(String string) {
        List<Appraisedetail> appList=(List<Appraisedetail>) getWrappedData();
        for(Appraisedetail app:appList){
            System.out.println(app.getAppraiseDetailID());
            if(app.getAppraiseDetailID()==Integer.parseInt(string)){
                return app;
            }
        }
        return null;
    }

}
私有类ObageDetailDataModel扩展了ListDataModel。
这是netbean项目的压缩文件,解压后可以直接用netbean打开。
当然,在我简化代码之后,问题仍然存在

试试这个:

if(app.getAppraiseDetailID().toString().equals(rowkey)) { ...
而不是你所拥有的。ObadeDetailDataModel还必须实现可序列化。同时删除以下内容中的“()”:

最后,确保侦听器的方法签名为:

public void modifyAppDetail(SelectEvent event)
您可以在该方法中设置断点并检查event.getObject(),它应该引用所选行。

尝试以下操作:

if(app.getAppraiseDetailID().toString().equals(rowkey)) { ...
而不是你所拥有的。ObadeDetailDataModel还必须实现可序列化。同时删除以下内容中的“()”:

最后,确保侦听器的方法签名为:

public void modifyAppDetail(SelectEvent event)

您可以在该方法中设置断点并检查event.getObject(),它应该引用所选行。

在仔细检查代码后,我解决了这个问题。
我发现我没有指定ObageDetailId,它也是行键。
我没有指定它,因为我希望DB在将数据插入DB时生成id。 方法getRowKey总是为null,因为数据没有插入数据库,当然id也没有生成。
随后,primefaces在想要获取rowKey为“null”的对象时什么也得不到

所以,在我自己指定id之后,一切都正常

对于遇到相同问题的用户,请记住指定rowKey,以便使用可选数据表。

在仔细检查代码后,我解决了问题。
我发现我没有指定ObageDetailId,它也是行键。
我没有指定它,因为我希望DB在将数据插入DB时生成id。 方法getRowKey总是为null,因为数据没有插入数据库,当然id也没有生成。
随后,primefaces在想要获取rowKey为“null”的对象时什么也得不到

所以,在我自己指定id之后,一切都正常

对于遇到相同问题的人,记住指定rowKey,以便可以使用可选数据表。

即使我正确识别了对象列表,我也在处理相同的问题。在我的例子中,我忘了将
数据表
包装成
格式

<h:form>
    <p:dataTable> ... </p:dataTable>
</h:form>

... 

即使我正确识别了对象列表,我也在处理相同的问题。在我的例子中,我忘了将
数据表
包装成
格式

<h:form>
    <p:dataTable> ... </p:dataTable>
</h:form>

... 

您的支持bean的范围是什么?您的支持bean的范围是什么?您好,很抱歉最近的回复。但是,我照你说的做了,问题仍然存在。你还有别的想法吗?非常感谢。你能给我看一下整个支持bean的来源吗?我一直使用这个,它对我来说很好。谢谢你,我简化了我的代码并把它放在谷歌硬盘上:顺便说一句,这是一个netbean项目的压缩文件,解压后你可以直接用netbean打开它。当然,在我简化代码之后,问题仍然存在。再次感谢你。谢谢你argh1969,我找到了解决办法。结果表明,行键为空。设置rowKey后,它工作正常。无论如何谢谢你。嗨,啊,很抱歉最近回复你。但是,我照你说的做了,问题仍然存在。你还有别的想法吗?非常感谢。你能给我看一下整个支持bean的来源吗?我一直使用这个,它对我来说很好。谢谢你,我简化了我的代码并把它放在谷歌硬盘上:顺便说一句,这是一个netbean项目的压缩文件,解压后你可以直接用netbean打开它。当然,在我简化代码之后,问题仍然存在。再次感谢你。谢谢你argh1969,我找到了解决办法。结果表明,行键为空。设置rowKey后,它工作正常。谢谢你,我也有类似的问题。我已经用从MySQL表中获取的主键设置了rowKey。但是,当我尝试选择并导出时,我会从第一行获取行。我也有类似的问题。我已经用从MySQL表中获取的主键设置了rowKey。但是,当我尝试选择并导出时,我会从第一行获取行。