2009-09-13 4 views
0

클라이언트가 일부 데이터를 입력하고 제출 버튼을 클릭하여 보고서를 생성 할 수있는 기능을 내 웹 앱에 구현했습니다.Struts2 + jQuery - 클라이언트에 정기적 인 업데이트 보내기

문제는 보고서 생성에 많은 시간이 걸리고 사용자가 입력 한 데이터가 잘못되면 보고서가 생성되지 않을 수 있다는 것입니다. 클라이언트 프레스 내가

같은 다양한 하위 작업으로 분할 할 보고서 생성 작업의 상태/진행 상황을 보여주고 싶은 바로 그 페이지 아래에 다음 제출할 때

전체 보고서 생성 작업은 여러 하위 작업이 있고 내가 원하는

- Validating input data ------ Done 
- Fetching the data  ------ In Progress 
and so on, 

웹 레이어에서 Struts2, jQuery를 사용하여 어떻게하면됩니까?

도움이 될 것입니다.

감사합니다.

+0

위의 사항에 대한 의견이 있으십니까? – peakit

답변

1

우리는 비슷한 문제가있었습니다. 거래는 일반적으로 1 분에 20 초 정도 걸립니다. 우리는 쉽게 솔루션이 될 것이라고 생각하지만 우리는

  1. 장기 실행 요청이 수신되면 세션이 생성되고 새 스레드가 요청을 처리하기 위해 산란되어,이 같은 기법으로 돌아가 셨습니다.
  2. "데이터 수집 중 ..."을 표시하는 텍스트가있는 페이지가 즉시 반환됩니다. 이 페이지에는 매 초마다 새로 고치는 타이머가 있습니다. 다시로드 URL에는 쿼리 매개 변수에서 세션 ID (HttpSession을 사용하지 않음)가 포함되어 있습니다.
  3. 작업 처리기가 세션 ID로 요청을 보게되면 세션이 시작되었음을 알게되고 작업 스레드가 업데이트하는 상태 변수를 확인합니다. 완료되지 않은 경우 새 상태 인 "DB1에서 데이터 검색 중 ..."으로 페이지를 업데이트합니다. 이것이 다시로드 될 때 깜박입니다. 신경 쓰면 AJAX를 사용하여 상태를 업데이트 할 수 있습니다.
  4. 작업 스레드가 완료되고 페이지를 전달할 준비가되면 호출은 결과를 반환합니다.

로드 밸런서에 문제가 발생했습니다. 구성표가 작동하려면 모든 다시로드가 동일한 서버로 돌아와야합니다. 다행히로드 밸런서는 세션 ID를 기반으로 스티키 라우팅을 지원합니다.

+0

감사합니다 ZZ 코더 .. 하지만 의심 스럽네요 - 위의 3에서, 액션에 sessionId가있을 때 어떻게 상태 변수를 쿼리합니까? – peakit

+0

세션을 만들 때 세션 객체를지도의 어딘가에 저장해야합니다. servletContext.setAttribute (sid, obj)를 사용할 수 있습니다. 3 단계에서 servletContext.getAttribute (sid)를 사용하여 상태가 포함 된 세션 객체를 검색하십시오. –

+0

내 생각을 정리했습니다 .. 당신의 아이디어를 공유해 주셔서 감사합니다 .. – peakit

관련 문제