Ответ 1
Думаю, в этом случае вы не должны использовать один вызов RequestBuilder
AJAX. Вы можете полагаться на поведение браузера по умолчанию, вызывая обычный вызов и позволяя браузеру обрабатывать ответ PDF (отображая его с помощью плагина просмотра PDF или открывая диалог "Сохранить" ).
Существует несколько альтернатив для достижения этого:
-
Если вы можете передавать свои данные в запросе GET (возможно только для небольшого тома данных), вы можете создать URL-адрес с данными как параметры GET, а затем открыть новое окно браузера с помощью Window.open(), передающий URL с данными.
-
Для больших объемов данных вы можете сначала отправить свои данные с помощью
RequestBuilder
на сервер для хранения данных во времени и в RequestCallback.onResponseReceived( ) откройте новое окно браузера с коротким URL-адресом, как указано выше, в альтернативе 1. На стороне сервера вам необходимо разделить сервлет создания PDF на две части: сервлет хранилища данных с методом POST (т.е. сохранение данных в веб-сеанс) и сервлет рендеринга PDF с методом GET, который выводит данные из сеанса (и удаляет его) и не требует больших параметров. -
Создайте форму с методом POST, скрытые поля для ваших данных и URL-адрес сервлета для генерации PDF. Заполните скрытые поля вашими данными и введите форму программно (т.е. FormPanel.submit()). Если вы создаете
FormPanel
с целевым именем, браузер открывает новое окно или использует указанный фрейм для обработки ответа.