jasperreports 보고서 플래시 디 스 플레이
jasperreports 의 웹 보고서 표현 방식 은 두 가지 가 있 습 니 다.하 나 는 applt viewer 이 고 다른 하 나 는 플래시 viewer 입 니 다.전자의 실현 은 브 라 우 저 에 자바 가 설치 되 어 실행 되 어야 할 때 다음 방식 만 고려 합 니 다.
앞에서 언급 한 demo 의 jasper-webapp 에서 플래시 폴 더 의 플래시 보고서 뷰 어 jasperreports-flash-4.0.0.swf 를 로 컬 프로젝트 의 한 폴 더 에 복사 합 니 다.
저 희 는 demo 의 swf.html 내용 을 참고 합 니 다.
코드 의 굵 은 부분 에 주 의 했 습 니까?프로젝트 배치 파일 웹 xml 에 servlet 극 을 추가 해 야 한 다 는 것 은 분명 합 니 다.
JasperReports Flash Viewer - Web Application Sample
Xml4SwfServlet
net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet
Xml4SwfServlet
/servlets/xml4swf
SwfServlet
com.easyway.jaserreport.flash.JasperReportFlashServlet
SwfServlet
/servlets/swf.html
index.html
BASIC
demo 의 단일 사용자 와 달리 사용자 가 보고 서 를 조회 한 후에 생 성 된 JasperPrint 대상 을 구분 해 야 하기 때문에 사용자 의 현재 session 에 set 를 넣 어야 합 니 다.그런데 이 걸 어떻게 꺼 내 서 Xml4Swf Servlet 으로 보 여 드릴 까요?이 servlet 는 fetch Size 인 자 를 제외 하고 어떤 인 자 를 받 을 수 있 습 니까?
다행히 jasperreports 는 소스 코드 를 직접 보고 수정 할 수 있 습 니 다.이 Xml4SwfServlet 의 실현 류 net.sf.jsperreports.j2ee.servlets.Xml4SwfServlet.java 의 조부 류 net.sf.jsperreports.j2ee.servlets.BaseHttpServlet.java 를 연구 해 봅 시다.
BaseHttpServlet 에서 session 의 모든 JasperPrint 대상 을 List 형식 으로 되 돌려 주 는 방법 을 정의 한 것 을 알 수 있 습 니 다.
public static List getJasperPrintList(HttpServletRequest request){
.......
}
이것 은 두 개 와 request 대상 이 받 아들 일 수 있 는 매개 변수 이름 을 정의 합 니 다.
public static final String JASPER_PRINT_LIST_REQUEST_PARAMETER = "jrprintlist";
public static final String JASPER_PRINT_REQUEST_PARAMETER = "jrprint";
그리고 getJasperPrintList 방법 에서 그들 을 받 아들 입 니 다.매개 변수 값 이 비어 있 지 않 으 면 이 두 매개 변수 값 으로 session 에서 해당 하 는 JasperPrint 대상 이나 JasperPrint 대상 이 있 는 List 를 꺼 냅 니 다.보고 서 를 채 워 서 하나의 JasperPrint 대상 set 를 session 에 만 들 때 다음 이 필요 합 니 다.
request.getSession().setAttribute(request.getSession().getId() + "_jrprint",jasperPrint);
이 때 인자"jrprint"의 값 은 request.getSession().getId()+"입 니 다.jrprint 의 값 입 니 다.
보고 서 를 수정 하여 페이지 ViewReport.jsp(demo 에 대응 하 는 swf.html)에서 Xml4SwfServlet 에 보 낸 매개 변 수 는 다음 과 같 습 니 다.
이렇게 하면 세 션 을 구분 하여 JasperPrint 대상 을 읽 고 플래시 보고 서 를 보 여 줍 니 다.
그러나 우 리 는 또 새로운 문제 에 부 딪 힐 것 이다.첫 번 째 로 보고 서 를 조회 하여 보 여 준 후에 조회 조건 을 재 설정 하여 다시 조회 할 때 플래시 의 보고서 내용 은 처음 과 마찬가지 로 업데이트 되 지 않 았 다 는 것 을 알 게 될 것 이다.
조사 결과 ViewReport.jsp 가 다시 불 러 올 때 서버 측 에 보 내 는 Http 요청 url 이 매번 같 기 때문에 브 라 우 저 는 서버 측 이 업데이트 되 지 않 았 다 고 생각 하고 캐 시 내용 을 페이지 로 되 돌려 줍 니 다.
그러면 우 리 는 방법 을 생각해 보 겠 습 니 다.매번 요청 한 url 이 다 릅 니 다.요청 한 후에 시간 을 추가 합 니 다.
네,저 는 인자 jrprint 의 값 을 추가 한 후에 현재 시간 을 추 가 했 습 니 다.분점 과 원래 의 값 으로 분리 되 었 습 니 다.그러면 사용자 가 보고서 조 회 를 한 후에 View Report.jsp 가 새로 고침 할 때 브 라 우 저가 서버 에 보 내 는 요청 은 매번 다 릅 니 다.큰 성 과 를 거 두 었 습 니 다.그러면 우 리 는 다 중 사용자 상황 에서 플래시 플레이어 로 완벽 하 게 보고 서 를 보 여줄 수 있 습 니 다.
JasperReportFlashServlet
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;
import net.sf.jasperreports.j2ee.servlets.Xml4SwfServlet;
/**
*
* ,JasperReportFlashServlet Flash SWF
*
* 2013-4-28
* @author longgangbai
* @version $Revision$ 2013-4-28
* @since 3.0.0
*/
public class JasperReportFlashServlet extends Xml4SwfServlet {
//
private static final long serialVersionUID = 1L;
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
ServletContext context = this.getServletConfig().getServletContext();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
try {
String reportFileName = context.getRealPath("reports/WebappReport.jasper");
File reportFile = new File(reportFileName);
if (!reportFile.exists()) {
throw new JRRuntimeException(
"File WebappReport.jasper not found. The report design must be compiled first.");
}
Map parameters = new HashMap();
parameters.put("ReportTitle", "Address Report");
parameters.put("BaseDir", reportFile.getParentFile());
JasperPrint jasperPrint = JasperFillManager.fillReport(reportFileName, parameters,
new JasperReportDataSource());
request.getSession().setAttribute(request.getSession().getId()+"_"+BaseHttpServlet.JASPER_PRINT_REQUEST_PARAMETER, jasperPrint);
request.getRequestDispatcher("/jasperReportSWF.jsp").forward(request, response);
} catch (JRException e) {
out.println("");
out.println("");
out.println("JasperReports - Web Application Sample ");
out.println("");
out.println("");
out.println("");
out.println("JasperReports encountered this error :");
out.println("
");
e.printStackTrace(out);
out.println("
");
out.println("");
out.println("");
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Flash에서 ChatWork에 메시지 게시Flash가 ChatWork API를 사용할 수 있는지 시도했습니다. 에 상세한 것이 쓰여져 있습니다. 채팅 작업 API를 사용하면 메시지 전송 및 작업 추가와 같은 채팅 작업의 기능을 외부 프로그램에서 쉽게 사용할...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.