Java 为什么在jasper报告中使用存储过程时会得到空页?
我正在使用存储过程生成pdf报告。然而,若我不使用存储过程,它将毫无问题地工作,但当我使用存储过程时,我将得到一个空页面。 我在下面发布我的代码,我的代码有问题吗Java 为什么在jasper报告中使用存储过程时会得到空页?,java,jasper-reports,Java,Jasper Reports,我正在使用存储过程生成pdf报告。然而,若我不使用存储过程,它将毫无问题地工作,但当我使用存储过程时,我将得到一个空页面。 我在下面发布我的代码,我的代码有问题吗 public void PDFDiploma(ActionEvent actionEvent) throws JRException, IOException, SQLException { String reportPath = FacesContext.getCurrentInstance()
public void PDFDiploma(ActionEvent actionEvent) throws JRException,
IOException, SQLException {
String reportPath = FacesContext.getCurrentInstance()
.getExternalContext()
.getRealPath("/WEB-INF/report/Diploma.jasper");
Authentication auth = SecurityContextHolder.getContext()
.getAuthentication();
String name = auth.getName();
System.out.println("user name : :: : :: : :: " + name);
Connection conn;
conn = DatabaseEngine.getConnection();
System.out.println("Connection : " + DatabaseEngine.getConnection());
Map jasperParameter = new HashMap();
KpLoginDAO kpLoginDAO = new KpLoginDAO();
KpLogin kpLogin = kpLoginDAO.findById(name);
Long loginUserID = null;
loginUserID = kpLogin.getKisi().getKisiid();
Short prmOgrenciDuzey = (Short) actionEvent.getComponent()
.getAttributes().get("prmOgrenciDuzey");
Long prmKisiid = (Long) actionEvent.getComponent().getAttributes()
.get("prmKisiid");
Long prmOgrenimsureci = (Long) actionEvent.getComponent()
.getAttributes().get("prmOgrenimsureci");
String prmBelgeTuru = (String) actionEvent.getComponent()
.getAttributes().get("prmBelgeTuru");
System.out.println("loginUserID : " + loginUserID
+ " prmOgrenimsureci : " + prmOgrenimsureci
+ " prmBelgeTuru : " + prmBelgeTuru);
System.out.println("prmOgrenciDuzey : " + prmOgrenciDuzey
+ " prmKisiid : " + prmKisiid + " prmOgrenimsureci : "
+ prmOgrenimsureci + " prmBelgeTuru : " + prmBelgeTuru);
/*
* VerilenbelgeDAO verilenBelgeDAO = new VerilenbelgeDAO(); Verilenbelge
* verilenbelge = verilenBelgeDAO.findById(Long
* .parseLong(prmBelgeTuru));
*
* addAction(prmOgrenimsureci, loginUserID, verilenbelge);
*/
String jrxmlFile = FacesContext.getCurrentInstance()
.getExternalContext()
.getRealPath("/WEB-INF/report/Diploma.jrxml");
HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
JasperReport jasperReport = JasperCompileManager
.compileReport(jrxmlFile);
jasperParameter.put("v_KISIID", prmKisiid);
jasperParameter.put("v_OGRENCIDUZEYI", prmOgrenciDuzey);
jasperParameter.put("v_OGRENIMSURECIID", (long) 15220);
System.out.println("---------------CON----------- : " + conn);
jasperPrint = JasperFillManager.fillReport(reportPath, jasperParameter,
conn);
System.out
.println("----------jasperprint------------ : " + jasperPrint);
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.addHeader("Content-disposition",
"attachment; filename=Diploma.pdf");
ServletOutputStream servletOutputStream = httpServletResponse
.getOutputStream();
// JasperRunManager.runReportToPdfStream(reportStream,
// servletOutputStream, jasperParameter, conn);
JasperExportManager.exportReportToPdfStream(jasperPrint,
servletOutputStream);
FacesContext.getCurrentInstance().responseComplete();
}
您应该只使用一个使用存储过程的字段来提供更简单的代码。为什么不使用view呢?我需要使用3个变量,因为我认为数据源是空的,所以我的页面是空的,但是当你查看我的代码时,你可以看到conn变量是定义的。你能在报告中写出你的参数来检查它是否正确发送吗?或者你能在数据库中看到你最后的查询吗?谢谢你的帮助,问题解决了,是关于参数的