我在使用p:dataTable时遇到了问题,并从单行选择中排除了一列。

我的dataTable中有4列。需要前3个来显示fileId,fileName和uploadDate。在第四列中,每行都有一个命令按钮,用于开始文件处理操作。
但也有行选择(对事件具有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");
    }
}

有什么方法可以从行选择中排除带有按钮的列?我只需要它开始处理文件,而无需导航到其他页面。

最佳答案

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

我将此行添加到p:commandButton:

onclick="event.stopPropagation();"

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

关于jsf - Primefaces:从p:dataTable中的行选择中排除列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14879193/

10-12 04:12