2010-12-07 2 views
0

Tapestry 5 프레임 워크/자바 스크립트를 사용하는 웹 응용 프로그램 프로젝트에서 작업 중입니다. 이 응용 프로그램은 입력이 적고 pdf 파일을 반환합니다.Tapestry5에서 페이지와 스트림을 모두 반환하려면 어떻게해야합니까?

사용자가 클릭 할 때 양식 제출 버튼을 사용 중지해야한다는 새로운 요구 사항이 있습니다. 보고서가 생성 될 때까지 버튼은 비활성화 상태를 유지해야합니다. 제출 버튼을 비활성화하기 위해 javascript를 작성할 계획입니다. 그러나 pdf 파일을 반환하는 동안 어떻게 버튼을 다시 활성화 할 수 있습니까?

나는 Tapestry 문서화를 완료했다. doc에 따라 유효한 반환 유형은 "Nothing, String, Class, Page, Link, Stream"입니다. 페이지를 반환하면 제출 버튼을 다시 사용할 수 있습니다. 스트림을 반환하면 사용자는 pdf를 다운로드 할 수 있습니다. 하지만 나는 둘 다하고 싶다. 여러 객체를 반환 할 수있는 방법이 있습니까 (다른 객체 안에 하나의 객체가있을 수 있습니다). (또는) 누군가이 문제에 대한 해결책을 제시 할 수 있습니까?

감사

답변

2

나는 당신의 워크 플로우를 추측하고있어 양식이 핸들러가 onActivate 방법에 스트림 (PDF 파일)를 반환하는 페이지로 지시 제출하는 것입니다. 또한 응답 헤더를 설정하여 브라우저가 파일을 다운로드하지 않고 다운로드하도록 추측하고 있습니다.

이렇게하면 브라우저는 일반적으로 '다른 이름으로 파일 저장'대화 상자를 만들고 현재 페이지는 절대로 탐색하지 않습니다 (새로 고치지 않음). 파일이 다운로드되었음을 알리는 콜백을받지 못합니다.

따라서 위 워크 플로를 사용하면 시작하거나 완료하는 다운로드에 대한 응답으로 해당 단추를 다시 사용할 수 없습니다. 이는 스트림 응답이 임의의 이진 데이터이며 브라우저에서 실행될 수있는 html/javascript가 아니기 때문입니다. 당신은 HTML/자바 스크립트 + 바이너리 파일 데이터의 혼합 된 응답을 반환 할 수 없습니다.

가장 좋은 방법은 일정 시간 동안 버튼을 비활성화 한 다음 두 번 클릭하지 못하도록 다시 활성화하는 것입니다. 애플리케이션에 너무 많은 복잡성을 추가하고 싶지 않은 경우이 방법을 권장합니다.

그러나 양식 제출과 다운로드 사이에 추가 요청 - 응답을 삽입하는 워크 플로를 변경할 수 있습니다.

  1. 양식 제출 세션에 PDF 생성 매개 변수를 저장하고 응답을 반환 :

    즉, 대신 스트림을 반환하는 페이지로 바로 지시, 당신은 다시 다운로드를 요청하여 현재 페이지를 다시로드 할 수

  2. 다운로드 URL을 사용자가 볼 수 있도록 설정 올바른 헤더와 함께 스트림 응답 반환을 호출 다운로드 URL로 리디렉션하는 메타 새로 고침 또는 스크립트 지시어와 함께
  3. 새로운 페이지가로드 (페이지를 다시로드) '다른 이름으로 파일 저장'대화 상자

원하는 기능을 얻을 수있는 다른 방법이 있지만 양식 제출과 파일 다운로드 사이에 추가 요청 - 응답이 필요하므로 패턴이 동일합니다.

ps. 이것은 실제로 태피스 트리 문제가 아닙니다. 프레임 워크와 관계없이 동일한 문제를 접하게됩니다 (프레임 워크가이 경우를 처리하기 위해 특별한 작업을 수행하지 않는 한). 그것은 단지 http/브라우저 기술이 작동하는 방법입니다.

+0

신속하고 자세한 답변을 보내 주셔서 감사합니다.두 번째 방법 (메타 새로 고침 태그 사용)을 시도해 보겠습니다. 그러나 더블 클릭 문제를 매우 쉽게 해결할 수있는 첫 번째 방법이 마음에 들었습니다. – Rajesh

+0

도와 드리겠습니다. 작동한다면 똑딱 거리십시오. 그건 당신이 stackoverflow를 사용하는 방법입니다. – pstanton

관련 문제