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 3.0 的 p:dataTable 中设置 p:column 的宽度?