Wicket: перенаправление на общий ресурс - PullRequest
0 голосов
/ 22 декабря 2010

У меня есть форма калитки, которая после отправки должна предоставить пользователям файл для скачивания. файл генерируется внешним сервлетом (на основе формы), который записывает сгенерированное содержимое в выходной поток ответа.

обычно это можно сделать с помощью 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) - все работает, файл правильно сформирован и доступен для скачивания.

Есть ли что-то еще, что я должен сделать? скорее всего это что-то глупое, но я уже целый день бьюсь головой об стену ...

1 Ответ

0 голосов
/ 22 декабря 2010

проблема решена. причиной, по которой браузер не обработал ответ, был тот факт, что форма была отправлена ​​с использованием AJAX. изменение типа отправки на обычный решило проблему.

...