ajax - 素面。在下载文件之前使用 ajax 验证
问题描述
在我的一个应用程序中,我有几个按钮可以执行以下操作:a)发送非 ajax 调用以下载文件 b)服务器进行一些验证 c)如果验证通过,则生成并下载文件 d)如果验证失败,然后显示错误消息。
该按钮可能看起来像这样(我不使用 p:fileDownload 因为它是一个继承的项目,但如果需要我可以使用它)
<p:commandLink styleClass="btn" id="botonExcel"
title="#{text['label.generar.excel']}"
action="#{incidenciasCuentasPagosAction.descargaExcelSeguimiento}" update=":messages" ajax="false"
rendered="#{not empty incidenciasCuentasPagosAction.existenIncidencias}">
<span class="hab-icon-24 hab-icon-excel"></span>
<span class="hab-button-text">#{text['label.generar.excel']}</span>
</p:commandLink>
它工作正常,但我有一个问题。由于调用是非ajax的,所以整个页面都被重新加载了,这有点烦人。例如,它移动到页面顶部。
我想做什么:
- 进行 AJAX 调用以验证生成的 de 文件
- 如果有错误,显示消息
- 如果一切正常,请对 donwload de File 进行非 AJAX 调用
问题是我不知道如何在验证通过后触发非 AJAX 调用。我知道如何使用 <p:remoteCommand> 进行 AJAX 调用,但它只允许 AJAX。我知道的唯一解决方法是使用隐藏按钮并单击它,但我发现它是一个 hack,所以我更喜欢另一种解决方案。
解决方案
您可以创建一个 servlet 来提供下载。这将使您在 bean 操作中发送 JavaScript 位置更改:
if (success) {
PrimeFaces.current().executeScript("document.location.href = 'SERVLET_URI'");
}
else {
// Set error message
}
推荐阅读
- php - nginx / symfony 路由到 public/styles 文件夹不起作用
- c - 为什么分配带有静态关键字的数组和不分配指针的数组有区别?
- python - 如何使用 django-microsoft-auth 获取当前登录用户进行 Microsoft 身份验证?
- python - 从 pygame 的列表中弹出特定元素
- javascript - Javascript数组与对象
- r - 我将如何在 R 中尝试这个:
- mongodb - 如何在不改变对象的情况下按 MongoDB 中的特定字段对查询结果进行分组?
- flutter - 使用 Flutter 测试 Firebase 云消息传递
- jquery - Run jQuery toggle in three parts
- c++ - 使用 C++ 中的类进行队列