Jsf p:数据表选择为空
我试图使用primefaces 4.0的可选datatable,但所选对象始终为空。 我已经厌倦了添加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
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。但是,当我尝试选择并导出时,我会从第一行获取行。