Создать загрузку или показать сообщение об ошибке в Wicket

Я использую следующий код для динамического создания загрузки в Wicket, используя ResourceLink подход (поскольку загрузка не является статическим файлом, его нужно генерировать на лету, и мне сказали, что это был правильный подход):

IResource res = new AbstractResource() {

    @Override
    protected ResourceResponse newResourceResponse(Attributes attributes) {
        ResourceResponse resourceResponse = new ResourceResponse();
        resourceResponse.setContentType("application/pdf");
        resourceResponse.setFileName("output.pdf");
        resourceResponse.setContentDisposition(ContentDisposition.ATTACHMENT);
        resourceResponse.setWriteCallback(new WriteCallback() {

            @Override
            public void writeData(Attributes attributes) throws IOException {
                OutputStream outputStream = attributes.getResponse().getOutputStream();
                try {
                    outputStream.write(generateDocument());
                } catch (Exception e) {
                    //Generation failed... Here I'd like to either show a popup message or alter the current page to show an error somewhere in the page
                }                       
            }
        });
        return resourceResponse;
    }   
};

ResourceLink<Void> resLink = new ResourceLink<Void>("resLink", res);
myForm.add(resLink);

Комментарий в коде выше показывает, где у меня проблемы. Если генерация загрузки не удалась (что может произойти, если определенные условия не выполняются), я хотел бы показать сообщение об ошибке, либо отобразив всплывающее окно, либо изменив страницу, чтобы отобразить некоторый текст ошибки (но в любом случае я хочу чтобы избежать ухода / перезагрузки всей страницы)

Это возможно?

2 ответа

Решение

Вот ссылка с ответом:

https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow

Не забудьте использовать try/catch с ошибкой (e.getMessage()) внутри catch и target.add(feedbackPanel) после перехвата ошибки.

Я не уверен, что это возможно, потому что вам нужно использовать не-Ajax-запрос, чтобы иметь возможность загружать как ATTACHMENT. Но так как это не Ajax-запрос, вам придется либо перезагрузить текущую страницу, либо перенаправить на другую страницу в случае ошибки.

Другие вопросы по тегам