Primefaces:从p:dataTable中的行选择中排除列

Posted

技术标签:

【中文标题】Primefaces:从p:dataTable中的行选择中排除列【英文标题】:Primefaces: Exclude column from row selection in p:dataTable 【发布时间】:2013-01-30 12:18:12 【问题描述】:

p:dataTable 有问题,从单行选择中排除一列。

我的数据表中有 4 列。需要前 3 个来显示 fileId、fileName 和 uploadDate。在第 4 列中,每一行都有一个用于启动文件处理操作的命令按钮。 但也有导航到文件详细信息页面的行选择(对事件进行 ajax 操作)。 现在,当我单击行上的任意位置(包括按钮)时,它会将我导航到详细信息页面。

这是我当前的代码:

<h:form>
    <p:dataTable id="billingFiles" value="#billingFiles"
        var="billingFile"
        rowKey="#billingFile.billingFile.idBillingFile"
        filteredValue="#billingService.filteredBillingFileDataModels"
        selectionMode="single" paginator="true" rows="10">

        <p:ajax event="rowSelect" listener="#billingService.selectBillingFileRow" />

        <p:column sortBy="#billingFile.id"
            filterBy="#billingFile.id" id="idFile"
            headerText="#msg['billing.file.id']"
            filterMatchMode="contains">
            <h:outputText value="#billingFile.id" />
        </p:column>

        <p:column sortBy="#billingFile.uploadDate"
            filterBy="#billingFile.uploadDate" id="uploadDate"
            headerText="#msg['billing.file.upload_date']"
            filterMatchMode="contains">
            <h:outputText value="#billingFile.uploadDate" />
        </p:column>

        <p:column sortBy="#billingFile.fileName"
            filterBy="#billingFile.fileName" id="fileName"
            headerText="#msg['billing.file.file_name']"
            filterMatchMode="contains">
            <h:outputText value="#billingFile.fileName" />
        </p:column>

        <p:column id="loadBillingFile">
            <p:commandButton id="loadBillingFileButton"
                rendered="#billingFile.fileStatus.equals('UPLOADED')"
                value="#msg['billing.load_billing_file']"
                action="#billingService.loadBillingFile(billingFile.billingFile)"
                update=":form" />
        </p:column>
    </p:dataTable>
</h:form>

还有导航到文件详情页面的方法:

public void selectBillingFileRow(SelectEvent event) 
    BillingFileDataModel billingFileDataModel = (BillingFileDataModel) event.getObject();
    if (billingFileDataModel != null) 
        selectedBillingFile = billingFileDAO.findBillingFileById(billingFileDataModel.getBillingFile().getIdBillingFile());
        FacesContext.getCurrentInstance().getExternalContext()
        .getRequestMap().put(JsfView.EVENT_KEY, "viewBillingFile");
    

有没有办法从行选择中排除带有按钮的列?我只需要它来开始处理文件,而不需要将我导航到其他页面。

【问题讨论】:

你在处理什么文件,是数据库吗? 它开始使用 Spring Batch 处理 txt 文件。 您在 dataTable 上有一个 rowSelect Primefaces Ajax 事件,每当您单击一行时,该事件就会执行以下侦听器:"#billingService.selectBillingFileRow" 我会查看此方法的代码,看看它是重定向还是转发页面。 您可以在我的问题的详细信息中看到方法。 【参考方案1】:

我找到了解决问题的部分方法。 当onClick 事件发生时,我阻止了rowSelect ajax 操作的执行。

我将此行添加到p:commandButton

onclick="event.stopPropagation();"

我说它部分工作,因为单击带有按钮的列,而不是按钮本身,仍然执行rowSelect 操作。

【讨论】:

另一个粗略的选择是选择性地获取SelectEvent(来自getComponent())的来源,并根据触发事件的组件类型选择性地执行方法体的其余部分跨度>

以上是关于Primefaces:从p:dataTable中的行选择中排除列的主要内容,如果未能解决你的问题,请参考以下文章

如何根据条件使primefaces datatable列可编辑

使用JSF(Primefaces)将数据从Excel复制并粘贴到Datatable

Primefaces dataTable过滤日期

如何在 PrimeFaces 3.0 的 p:dataTable 中设置 p:column 的宽度?

Primefaces Accordion + Datatable过滤器/多项选择无法按预期工作

PrimeFaces 3.0 - <p:dataTable> 标题不与使用 scrollable="true" 对齐