Перенаправление обратно в портлет из ResourceMapping в портлетах Spring 3

Я пытаюсь найти способ обеспечить загрузку CSV через портлет Spring 3. У меня есть метод, который использует аннотацию @ResourceMapping для определения обработчика, который принимает некоторые параметры отчета в форме @ModelAttribute, строит отчет и возвращает его. Уловка-22, с которой я сталкиваюсь, проверяет параметры, отправляемые из клиентской формы.

Если я сделаю обработчик @ResourceMapping, я смогу установить заголовки и записать отчет как с использованием ResourceResponse, но я не могу понять, как перенаправить пользователя обратно в представление портлета с ошибками, когда их ввод не прошел проверку. Однако, если я сделаю это @ActionMapping, я смогу затем проверить BindingResult и переслать их обратно в форму по мере необходимости, но ActionResponse не позволяет мне установить заголовок Content-Disposition или записать байты CSV, что является сортировкой критических для отправки отчета обратно.

Я в полной растерянности, так как даже не знаю, какие у меня есть варианты. Возможно ли вообще сделать то, что я пытаюсь сделать с портлетом? Есть ли другие примеры, на которые я мог бы посмотреть для возможного обходного пути?


person CodeChimp    schedule 26.06.2013    source источник


Ответы (1)


Я предлагаю вам использовать как @ActionMapping, так и @ResourceMapping для выполнения вашего требования.

Поскольку вы сказали, что смогли обработать ошибки validation с помощью @ActionResponse, я расскажу вам, как обработать Resource Streaming.

Как вы знаете, за каждым @ActionResponse следует @RenderResponse, просто верните тот же вид, но на этот раз со скрытым iframe, src которого указывает на ResourceURL.

Теперь Request, которое вы получаете в @ResourceMapping, уже является Validated. Итак, теперь вы можете служить своему CSV.

Я не знаю, насколько сложна ваша UI и используете ли вы jsp как views в своем приложении. При хорошем управлении Validation может справиться @ResourceMapping.

Спасибо

person Niranjan    schedule 26.06.2013
comment
Я даю вам кивок, так как это хорошее решение. Однако я выбрал другой маршрут использования вызова AJAX для проверки, а затем после проверки ввода выполните еще один вызов AJAX для получения CSV. Но iframe был идеей, о которой я не думал. - person CodeChimp; 27.06.2013