当前位置: 首页 > 知识库问答 >
问题:

p: 数据表选择空

谷梁德容
2023-03-14

我试图使用primefaces 4.0的可选datatable,但所选对象始终为null。我已经厌倦了像这里和这里所说的那样添加行键,但仍然得到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>

在我的后盾豆里:

newAppraiseBean.modifyAppDetail():(只需打印所选项目)

public void modifyAppDetail(){
    System.out.println("modify, selectedAppDetail:"+selectedAppDetail);
}

数据模型

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;
    }

}

它总是打印为空,我不知道我遗漏了什么。


这是netbean项目的压缩文件,解压后可以直接用netbean打开。
当然问题仍然存在,在我简化代码后。

共有3个答案

岳高明
2023-03-14

我正在处理同样的问题,即使我已经正确地识别了对象列表。在我的例子中,我忘了将数据表包装成一个表单。

<h:form>
    <p:dataTable> ... </p:dataTable>
</h:form>
冀越
2023-03-14

尝试以下操作:

if(app.getAppraiseDetailID().toString().equals(rowkey)) { ...

而不是你所拥有的。evaludetaildatamodel还必须实现可序列化。同时删除以下内容中的“()”:

listener="#{newAppraiseBean.modifyAppDetail()}"

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

public void modifyAppDetail(SelectEvent event)

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

汪驰
2023-03-14

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

所以,在我自己指定id之后,一切都很好!
对于那些遇到同样问题的人,请记住指定rowKey,以便您可以使用可选择的可数据。

 类似资料:
  • 我对Primefaces数据表有一个问题,尤其是对Selection对象。 在我下面的代码中,我总是为变量“选定的问题”获得空,该变量绑定到具有选择的数据表。 联合战略框架如下: 和相关的Bean类(AllCountionBean.class): 数据模型: 我调试了一些运行,并提到AllQuestionBean中的变量“selectedQuestion”。课程永远不会固定。也就是说,“onRow

  • 如果某个条件为真,是否有方法取消primefaces树中节点的选择事件? 我想显示一个对话框,如果用户选择“取消”选项,则不应更改选择。我曾尝试从p:ajax调用javascript函数,但还是选择了新节点。 我必须重写Primefaces树的默认行为? PF6.2

  • 我使用以下列表从控制器填充了JSP中的下拉列表:“” 例如,我使用下拉菜单将5保存为db中thirdPartyOccupationId的值。当我重新加载页面时,值5不是选中的值。 同一段代码正在处理不同的字段,我不知道我错过了什么。 模型类: ReportClass.java 控制器.java 感谢任何指点。

  • 问题内容: 如何编写SQL语句从三个表中选择数据? 问题答案: 使用联接 这将要求每个表都有一个table_1_id键,并且每个表中都有一个条目。 如果table_2或table_3可能没有数据,但您仍想显示来自table_1的数据,则可以使用LEFT JOIN

  • 我正在使用具有多重选择和分页功能的datatable,当我选择一行并转到另一个页面,然后返回到我所在的页面时,我选择的行将不再被选中。我使用的是primefaces 3.5、mojarra、jboss 7.1,我的bean是ViewScope。下面是我的代码: 型号:

  • 我想从Primefaces中的p:selectOneMenu组件(下拉列表)中选择一个值。我从Java Bean获取数据。我有以下代码: XHTML: Java Bean DevTestController。java: InfoRowBean。java: 转换器InfoRowBeanConverter.java: 如果我按下按钮,什么都不会发生(也没有错误)。如果我从标记中删除参数“value”(