У меня есть форма калитки, которая после отправки должна предоставить пользователям файл для скачивания. файл генерируется внешним сервлетом (на основе формы), который записывает сгенерированное содержимое в выходной поток ответа.
обычно это можно сделать с помощью getRequestCycle().setRequestTarget(new RedirectRequestTarget(redirectUrl);
при отправке формы, где redirectUrl
будет URL внешнего сервлета с параметрами.
однако, redirectUrl
отображается в адресной строке браузера, что нехорошо, так как пользователи видят значения параметров, чего они не должны.
Чтобы преодолеть это, я реализовал пользовательский DynamicWebResource
, который выбирает вывод сервлета как byte[]
и привязывается к виртуальному URL через обычный механизм общих ресурсов калитки.
в форме отправки я делаю следующее:
RequestParameters rps = new RequestParameters();
rps.setResourceKey(new ResourceReference("myResource").getSharedResourceKey());
getRequestCycle().setRequestTarget(new SharedResourceRequestTarget(rps));
, а затем полагаться на внутренние способы обработки калитки.
при отладке я ясно вижу, что мой общий ресурс правильно вызывается, ответ внешнего сервлета правильно генерируется, выбирается и затем записывается в текущий ответ со всеми заголовками и прочим, но после этого ничего не происходит, никаких ошибок, просто ничего .
когда я звоню своему общему ресурсу напрямую, указывая, что URL-калитка привязала его (например, http://localhost:8080/webAppRoot/wicket/myResource?param1=value
) - все работает, файл правильно сформирован и доступен для скачивания.
Есть ли что-то еще, что я должен сделать? скорее всего это что-то глупое, но я уже целый день бьюсь головой об стену ...