2016-06-16 3 views
0

다음 코드를 사용하여 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); 

위의 코드에서 주석은 어디에 문제가 있는지를 보여줍니다. 다운로드 생성이 실패한 경우 (특정 조건이 충족되지 않으면 발생할 수 있음) 팝업 메시지를 표시하거나 페이지를 변경하여 오류 메시지를 표시하고 싶습니다 (그러나 두 가지 경우 모두 원하는 경우 전체 페이지를 떠나거나 다시로드하는 것을 피하십시오)

이것이 가능합니까?

답변

0

첨부 파일로 다운로드 할 수 있으려면 비 Ajax 요청을 사용해야하므로 이것이 가능하지는 않습니다. 그러나 Ajax 요청이 아니기 때문에 오류가 발생하면 현재 페이지를 다시로드하거나 다른 페이지로 리디렉션해야합니다.

+0

그 반대의 경우는 어떨까요? Ajax 컴포넌트를 사용하여 다운로드를 동적으로 생성 할 수 있습니까? –

+0

참조 : https://cwiki.apache.org/confluence/display/WICKET/AJAX+update+and+file+download+in+one+blow. 하지만 IMO는 Ajax 응답에서 바이너리 데이터를 스트리밍 할 수 없으며 리다이렉트와 함께 작동하기 때문에 유즈 케이스에도 사용할 수 없습니다. –