Jasper-report-Erzeugung und herunterladen von pdf in jsf primefaces
Ich bin in der Lage, generieren Sie einen jasper report im pdf-format .Ich habe ein Dialog wie unten gezeigt
<p:dialog id="courseListDia" header="Student Profile" widgetVar="courseEdit" resizable="true"
showEffect="fade" hideEffect="fade" appendTo="@(body)">
<h:form id="courseForm">
<h:panelGrid columns="2" id="profile">
<p:graphicImage id="photo1" alt="No Image" value="/images/#{studentDetailsBeans.clickedStudent.imageUrl}" width="100px" />
<h:panelGrid columns="2" id="Details">
<p:outputLabel value="Student Name"/>
<p:outputLabel value="#{studentDetailsBeans.clickedStudent.studentFirstName} #{studentDetailsBeans.clickedStudent.studentLastName}" />
<p:outputLabel value="Date of Birth"/>
<h:outputText value="#{studentDetailsBeans.clickedStudent.studentDob}">
<f:convertDateTime pattern="dd.MM.yyyy"/>
</h:outputText>
<p:outputLabel value="Age: #{studentDetailsBeans.age}"/>
<p:outputLabel value=""/>
<p:outputLabel value="Emergency Number: "/>
<p:outputLabel value=" #{studentDetailsBeans.clickedStudent.studentEmno}"/>
</h:panelGrid>
</h:panelGrid>
<h:panelGrid columns="2" id="cyclegroup">
<p:outputLabel for="cycle" value="Cycle:" />
<p:selectOneRadio id="cycle" value="#{studentDetailsBeans.selectedCycle}" converter="cycconv" >
<f:selectItems value="#{studentDetailsBeans.cycleListForStudent}" var="cyc" itemLabel="#{cyc.cycleNo}" itemValue="#{cyc}"/>
<p:ajax listener="#{studentDetailsBeans.changeCycle}" update="timinggroup" process="cycle" />
</p:selectOneRadio>
</h:panelGrid>
<h:panelGrid columns="2" id="timinggroup">
<p:outputLabel for="course_8" value="Course Starting At 8" />
<p:selectOneMenu id="course_8" value="#{studentDetailsBeans.selectedCourse8}" effect="fade" converter="courseconv" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{studentDetailsBeans.courseAt8}" var="c" itemValue="#{c}" itemLabel="#{c.courseName}" />
<p:ajax update="timinggroup" listener="#{studentDetailsBeans.courseChangeListener()}"/>
</p:selectOneMenu>
<p:outputLabel for="course_9" value="Course Starting At 9" />
<p:selectOneMenu id="course_9" value="#{studentDetailsBeans.selectedCourse9}" effect="fade" converter="courseconv" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{studentDetailsBeans.courseAt9}" var="c" itemValue="#{c}" itemLabel="#{c.courseName}" />
<p:ajax process="course_9" update="course_10" listener="#{studentDetailsBeans.courseChangeListener()}"/>
</p:selectOneMenu>
<p:outputLabel for="course_10" value="Course Starting At 10" />
<p:selectOneMenu id="course_10" value="#{studentDetailsBeans.selectedCourse10}" effect="fade" converter="courseconv" disabled="#{admissionFormBean.pd1}" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{studentDetailsBeans.courseAt10}" var="c" itemValue="#{c}" itemLabel="#{c.courseName}" />
<p:ajax update="timinggroup" listener="#{studentDetailsBeans.courseChangeListener()}"/>
</p:selectOneMenu>
<p:outputLabel for="course_11" value="Course Starting At 11" />
<p:selectOneMenu id="course_11" value="#{studentDetailsBeans.selectedCourse11}" effect="fade" converter="courseconv" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{studentDetailsBeans.courseAt11}" var="c" itemValue="#{c}" itemLabel="#{c.courseName}" />
<p:ajax process="course_11" update="course_12" listener="#{studentDetailsBeans.courseChangeListener()}"/>
</p:selectOneMenu>
<p:outputLabel for="course_12" value="Course Starting At 12" />
<p:selectOneMenu id="course_12" value="#{studentDetailsBeans.selectedCourse12}" effect="fade" converter="courseconv" disabled="#{admissionFormBean.pd2}" >
<f:selectItem itemLabel="Select One" itemValue="" />
<f:selectItems value="#{studentDetailsBeans.courseAt12}" var="c" itemValue="#{c}" itemLabel="#{c.courseName}" />
<p:ajax update="timinggroup" listener="#{studentDetailsBeans.courseChangeListener()}"/>
</p:selectOneMenu>
<p:commandButton value="ID Card" process="@this" actionListener="#{studentDetailsBeans.getIdCardPDF()}"/>
</h:panelGrid>
</h:form>
</p:dialog>
<p:commandButton value="ID Card" process="@this" actionListener="#{studentDetailsBeans.getIdCardPDF()}"/>
diesem Feuer, mein action-listener und es ist das generieren von berichten und schreiben Sie es in mein system-Laufwerk.Aber ich bin nicht immer die Datei als Download-Artikel.
public void PDF(String name) throws JRException, IOException{
init();
HttpServletResponse httpServletResponse=(HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();
httpServletResponse.addHeader("Content-disposition", "attachment; filename="+name+".pdf");
ServletOutputStream servletOutputStream=httpServletResponse.getOutputStream();
JasperExportManager.exportReportToPdfStream(jasperPrint, servletOutputStream);
System.out.println("All done the report is done");
servletOutputStream.flush();
servletOutputStream.close();
FacesContext.getCurrentInstance().responseComplete();
}
Bekomme ich den Bericht in mein Laufwerk.Nichts wird passieren in meinen Augen. Ich stehen noch in den gleichen Dialog.Ich erwarte ein pdf-download oder zum direkten ausdrucken bei Klick auf diese Befehlsschaltfläche.Bitte geben Sie Ihre Beratung.Ich habe gelesen, dass ajax-Aufrufe von P:der Dialog wird nicht Rendern der pdfs. Ich habe implementiert die report-download in normale links .Aber ich bin nicht in der Lage, es zu tun, aus dem Dialog oder mit dem Befehl button.
- Ich don ' T sehen überall in Ihrer Ansicht, von wo Sie anrufen, die
PDF
Methode - Die Methode ist mit der Funktion mit einem actionlistener.Es erreicht die Letzte Funktion oben geschrieben .
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie rufen
responseComplete
auf dieFacesContext
zu signalisieren, um die JSF-Laufzeitumgebung, sollte es zu einem Kurzschluss der response-Lebenszyklus, übergabe der Kontrolle an SieBedenken Sie auch, dass man nicht mit einem ajax-request zu erzeugen, eine Datei herunterzuladen. Eine vollständige HTTP-request erforderlich ist. Was dies bedeutet ist, dass Sie verwenden müssen
ajax="false"
auf Ihre<p:commandButton/>
oder verwenden Sie eine<h:commandButton/>
FacesContext.getCurrentInstance().getExternalContext().setResponseContentType("application/pdf")
execute="@this"
, ist die Lokalisierung der reichen. Finden Sie diese Antwort für wie zu verwenden, jasper reports in JSF stackoverflow.com/a/13696243/1530938<h:form/>
wie wird die Komponente in der Lage, irgendetwas vorlegen, was auf dem server :/?verwenden ajax="false" auf Ihren Befehl-Taste sonst jasper report wird nicht funktionieren.