다음 코드를 사용하여 ResourceLink
접근 방식을 사용하여 Wicket에서 동적으로 다운로드를 생성합니다 (다운로드가 정적 파일이 아니므로 즉시 생성해야하므로) 그리고 이것이 정확한 접근이라고 들었습니다.) :Wicket에서 다운로드 또는 오류 메시지 표시
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);
위의 코드에서 주석은 어디에 문제가 있는지를 보여줍니다. 다운로드 생성이 실패한 경우 (특정 조건이 충족되지 않으면 발생할 수 있음) 팝업 메시지를 표시하거나 페이지를 변경하여 오류 메시지를 표시하고 싶습니다 (그러나 두 가지 경우 모두 원하는 경우 전체 페이지를 떠나거나 다시로드하는 것을 피하십시오)
이것이 가능합니까?
그 반대의 경우는 어떨까요? Ajax 컴포넌트를 사용하여 다운로드를 동적으로 생성 할 수 있습니까? –
참조 : https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow. 하지만 IMO는 Ajax 응답에서 바이너리 데이터를 스트리밍 할 수 없으며 리다이렉트와 함께 작동하기 때문에 유즈 케이스에도 사용할 수 없습니다. –