gpt4 book ai didi

javascript - 是否可以使用 PrimeFaces RemoteCommand 下载文件?

转载 作者:行者123 更新时间:2023-11-28 19:16:03 24 4
gpt4 key购买 nike

我有一个带有表格的页面,其中有用户可以隐藏和显示的可选列。当用户选择通过表格底部的链接下载表格内容时,我想向他们发送当前显示列的内容。

为了做到这一点,我需要使用远程命令,因为常规的 commandLink 不会接受 js 参数来告诉服务器当前正在显示哪些列。

我的问题是文件没有被下载。当我调试时,我进入我的服务器方法并完全完成整个过程,当我返回浏览器时,我在 Chrome 的网络选项卡中看到文件的内容,但文件没有被下载,而是我的页面正在焕然一新。如果我在调用命令后将 return false 设置为 false,我会在 Chrome 的网络选项卡中看到该文件,并且页面不会刷新,但什么也不会发生。我尝试使用 onSuccess 或 onComplete 事件,但这些事件似乎没有按我的预期工作。

这可以使用 JSF 来完成还是我必须为此编写一个 servlet?

这是我的代码:链接

<h:commandLink value="Download data" onclick="invokeDownload();return false;" />

调用js方法:

var invokeDownload = function() {
var columnLabels = getVisibleColumns().toString();
downloadTableData([{ "name": "columnLabels", "value": columnLabels }]);
}

远程命令:

<p:remoteCommand name="downloadTableData" action="#{myBean.dataTable.download()}" process="@this"/>

最佳答案

没有。 <p:remoteCommand>触发 ajax 请求。但是您不能使用 ajax 下载文件。 Ajax 是由 JavaScript 代码执行的,出于明显的安全原因,它没有任何工具可以强制使用某些 JavaScript 变量中保存的某些数据进行“另存为”对话框。

只需触发一个同步请求。您可以让 JS 填充与您尝试传递的请求参数同名的隐藏输入字段。

<input type="hidden" id="name" name="name" />
<input type="hidden" id="value" name="value" />
<h:commandLink value="Download data"
onclick="populateDownloadData()"
action="#{myBean.dataTable.download()}" />
function populateDownloadData() {
var columnLabels = getVisibleColumns().toString();
document.getElementById("name").value = "columnLabels";
document.getElementById("value").value = columnLabels;
}

顺便说一句,这些参数有点奇怪。也许您对 <p:remoteCommand> 感到困惑例子。我只是使用了一个名为 columnLabels 的请求参数.

<input type="hidden" id="columnLabels" name="columnLabels" />
<h:commandLink value="Download data"
onclick="populateDownloadData()"
action="#{myBean.dataTable.download()}" />
function populateDownloadData() {
var columnLabels = getVisibleColumns().toString();
document.getElementById("columnLabels").value = columnLabels;
}

关于javascript - 是否可以使用 PrimeFaces RemoteCommand 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com