如何使用 DataTable ID 获取 Primefaces dataTable 的数据以在 Javascript 函数中使用?
How to get the data of a Primefaces dataTable to use in a Javascript function by using the DataTable ID?
我有以下 Primefaces 数据表(部分如下所示),它从数据库中获取值。
<p:dataTable id="datalist" value="#{debtPaymentsController.lazyDebtPayments}" var="item"
selectionMode="single" selection="#{debtPaymentsController.selected}"
lazy="true" widgetVar="debtPaymentsTable"
paginator="true" scrollable="true" scrollWidth="100%"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowKey="#{index}" rowIndexVar="index"
rows="10"
rowsPerPageTemplate="10,20,30,40,50">
</p:datatable>
我正在尝试使用 Javascript 脚本将数据表的内容导出到 excel,因为导出到 excel 的名为 DataExporter 的 Primefaces 工具不能很好地与urls:
<script type="text/javascript">
function exportTableToExcel(tableID) {
console.log(tableID);
var downloadLink;
var dataType = 'application/vnd.ms-excel';
var tableSelect = document.getElementById(tableID);
console.log(tableID);
var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
// Specify file name
filename = filename ? filename + '.xls' : 'excel_data.xls';
// Create download link element
downloadLink = document.createElement("a");
document.body.appendChild(downloadLink);
if (navigator.msSaveOrOpenBlob) {
var blob = new Blob(['\ufeff', tableHTML], {
type: dataType
});
navigator.msSaveOrOpenBlob(blob, filename);
} else {
// Create a link to the file
downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
// Setting the file name
downloadLink.download = filename;
//triggering the function
downloadLink.click();
}
}
</script>
这是我正在使用的按钮:
<p:commandButton id ="exportExcelFile" value="exportExcelFile" onclick="exportTableToExcel('datalist')"/>
当我使用 DataExporter 时,我是 运行 以下并且它似乎工作正常(除了 url 问题未在 excel 上显示为超链接),所以我导出在此特定时间显示在数据表上的所有数据:
<p:dataExporter type="xls" target="datalist" fileName="payments"/>
不幸的是,当我使用 Javascript 方式导出数据时,无论我尝试过什么,当数据列表数据作为 Javascript 函数的输入时,它都是空的。这是我得到的错误:Uncaught TypeError: tableSelect is null。如何传递数据表中显示的值,以便将它们导出到 excel 文件?
与其尝试几乎不可能的黑客攻击,不如使用 <p:dataExporter postProcessor="..."/>
来 post 处理导出的内容。
参见:
我有以下 Primefaces 数据表(部分如下所示),它从数据库中获取值。
<p:dataTable id="datalist" value="#{debtPaymentsController.lazyDebtPayments}" var="item"
selectionMode="single" selection="#{debtPaymentsController.selected}"
lazy="true" widgetVar="debtPaymentsTable"
paginator="true" scrollable="true" scrollWidth="100%"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowKey="#{index}" rowIndexVar="index"
rows="10"
rowsPerPageTemplate="10,20,30,40,50">
</p:datatable>
我正在尝试使用 Javascript 脚本将数据表的内容导出到 excel,因为导出到 excel 的名为 DataExporter 的 Primefaces 工具不能很好地与urls:
<script type="text/javascript">
function exportTableToExcel(tableID) {
console.log(tableID);
var downloadLink;
var dataType = 'application/vnd.ms-excel';
var tableSelect = document.getElementById(tableID);
console.log(tableID);
var tableHTML = tableSelect.outerHTML.replace(/ /g, '%20');
// Specify file name
filename = filename ? filename + '.xls' : 'excel_data.xls';
// Create download link element
downloadLink = document.createElement("a");
document.body.appendChild(downloadLink);
if (navigator.msSaveOrOpenBlob) {
var blob = new Blob(['\ufeff', tableHTML], {
type: dataType
});
navigator.msSaveOrOpenBlob(blob, filename);
} else {
// Create a link to the file
downloadLink.href = 'data:' + dataType + ', ' + tableHTML;
// Setting the file name
downloadLink.download = filename;
//triggering the function
downloadLink.click();
}
}
</script>
这是我正在使用的按钮:
<p:commandButton id ="exportExcelFile" value="exportExcelFile" onclick="exportTableToExcel('datalist')"/>
当我使用 DataExporter 时,我是 运行 以下并且它似乎工作正常(除了 url 问题未在 excel 上显示为超链接),所以我导出在此特定时间显示在数据表上的所有数据:
<p:dataExporter type="xls" target="datalist" fileName="payments"/>
不幸的是,当我使用 Javascript 方式导出数据时,无论我尝试过什么,当数据列表数据作为 Javascript 函数的输入时,它都是空的。这是我得到的错误:Uncaught TypeError: tableSelect is null。如何传递数据表中显示的值,以便将它们导出到 excel 文件?
与其尝试几乎不可能的黑客攻击,不如使用 <p:dataExporter postProcessor="..."/>
来 post 处理导出的内容。
参见: