2017-12-13 28 views
0

처음에는 컨텍스트를 설명하려고합니다. 나는 관련 일에서 자료를 가진 반환 파일을 클릭하는 단추가있다. 버튼을 클릭하면 DB에 질의 (date to-to와 함께)를 수행하고 데이터를 적절한 형식으로 파싱하고 StreamResourceFileDownloader으로 반환합니다. 모든 수업은 Vaadin 패키지입니다.FileDownloader - 브라우저에 의존하는 다른 동작

Button btExport = new Button("Export"); 
    FileDownloader fileDownloader = new FileDownloader(getReportsStream()); 
    fileDownloader.extend(btExport); 
    //update resource to download on click 
    btExport.addClickListener(event -> { 
     fileDownloader.setFileDownloadResource(getReportsStream()); 
    }); 

Chrome 및 IE 브라우저에서 모두 정상적으로 작동합니다. Mozilla에서는 Firefox가 그렇지 않습니다. Firefox 브라우저에서는 항상 이전 StreamResource 객체를 반환합니다. 같은 파일을 항상 반환합니다. 파이어 폭스처럼 캐시에서 가져 오는 것 같습니다. 왜냐하면 로그에서 Firefox에 대한 이벤트 클릭을 찾을 수 없기 때문입니다. Chrome 및 IE 로그가 존재합니다.

모든 브라우저가 최신입니다. Vaadin 버전 : 7.7.6

이유가 궁금하십니까? 또는 파일 다운로드를 위해 다른 방법으로 무엇을 할 수 있습니까?

편집 ///

나는 해결책을 찾았지만 임시 나도 몰라. 브라우저를 다시 설치 한 후 이상한 행동이 더 이상 발생하지 않습니다. 며칠 째 작동이 잘된다면 해결책으로 생각합니다.

+0

버튼에 클릭 수신기를 추가 할 필요가 없으면 fileDownloader.extend (btExport)로 충분해야합니다. –

+0

@Chris M 'StreamResource'와 같은 데이터가 동적으로 변경되지 않는 경우 (새로 고침 페이지 없음) 충분합니다. 필자의 경우 필자가 쓴 것처럼 선택한 날짜에 따라 데이터가 변경되었으므로 버튼 클릭시 '신선한 데이터'를 'StreamResource'로 입력해야합니다. – newOne

+1

서버 측 클릭 수신기는 다운로드가 시작된 후가 아니라 이전에 실행됩니다. 내가 아는 가장 좋은 해결 방법은'우선 FileDownloader.getFileDownloadResource' 또는'FileDownloader.handleConnectorRequest' 거기 스트림 생성 로직을 가지고있다 '''자바 공공 자원 getFileDownloadResource() { setFileDownloadResource (getReportsStream()); return super.getFileDownloadResource() } ''' –

답변

0

첫 번째로 파이어 폭스 57을 설치 한 후에 파이어 폭스 49에서 테스트를하고 있습니다. 내가 캐시를 청소하고 각각이 남아있을 때만 작동하는 것처럼 보입니다. 다른 컴퓨터를 확인하고 버전 57에서 작동하며 버전 49에서는 작동하지 않습니다.

결론적으로 최신 브라우저를 설치하고 이전 버전의 브라우저를 제거하고 정리해야합니다.