2015-06-10 4 views
1

Я пытаюсь загрузить файл по p: poll.Можно скачать файл на p: poll

Вот мой код:

<p:commandButton id="sendMessage" value="sendMessage" actionListener="#{logsController.sendMessage}" /> 
<p:poll interval="3" async="false" immediate="true" listener="#{logsController.downloadAll(null)}" /> 

и поддержка боб:

public void sendMessage(ActionEvent event) { 
    {adding message to queue} 
} 

public void downloadAll(ActionEvent event) { 
    ... 
    if(readyToDownload) { 
     Faces.sendFile(logFile.getFileByteArray(), "file.txt", true); 
    } 
} 

Я хочу открыть "сохранить как" диалог, но я получаю только JQuery ошибку синтаксического анализа JSON.

Содержимое, которое я пытаюсь загрузить, является результатом сообщения внешнего api, поэтому я не могу получить это внезапно.

Возможно, это еще один способ решить эту проблему?

ответ

4

Nope. Вы не можете ответить целым вложением файла как ответ ajax. Прежде всего, jQuery будет запутан, потому что он получил прикрепление файла вместо ожидаемого ответа XML/JSON с инструкциями, что делать с деревом HTML DOM. Во-вторых, JavaScript по очевидным соображениям безопасности не имеет никаких возможностей для принудительного диалога, предоставляющего содержимое файла, содержащегося в произвольной переменной JavaScript, Save As.

Загрузка файла действительно должна выполняться во время синхронного запроса. Именно такой запрос уволен с <h:commandButton>, <p:commandButton ajax="false">, или window.location.

Лучше всего вернуть инструкцию JavaScript для вызова синхронного запроса. Например.

if (readyToDownload) { 
    RequestContext.getCurrentInstance().execute("document.getElementById('form:download').click();"); 
} 
<h:form id="form"> 
    <p:commandButton id="download" styleClass="ui-helper-hidden" 
     action="#{logsController.downloadFile}" ajax="false" /> 
</h:form> 

И тогда на самом деле отправить файл в downloadFile() методом.

+0

Это работает для меня, спасибо. – mariuszs80

+0

Добро пожаловать. – BalusC

 Смежные вопросы

  • Нет связанных вопросов^_^