2015-04-02 85 views
0

我是JasperReport的新成員。我正在使用Eclipse Luna和JasperSoft Studio。 JasperReports的-3.7.6.jar。我triying生成從一個JSF頁面PDF文件,這就是我得到這個:使用JSF生成PDF Jasper Report返回java.lang.NullPointerException錯誤

顯示java.lang.NullPointerException

例外

javax.servlet.ServletException

根源

顯示java.lang.NullPointerException

這是JSF頁面

<h:body> 
    <h:form> 
     <h:inputText value="#{gradeManagedBean.code}" /> 
     <h:inputText value="#{gradeManagedBean.name}" /> 
     <h:commandButton actionListener ="#{gradeManagedBean.save}" value="submit"/> 
    </h:form> 
</h:body> 

的JSF ManagedBean:

package managedBean; 

    import java.io.File; 
    import java.io.IOException; 
    import java.io.Serializable; 
    import java.util.HashMap; 
    import java.util.Map; 

    import javax.ejb.EJB; 
    import javax.enterprise.context.SessionScoped; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.context.FacesContext; 
    import javax.faces.event.ActionEvent; 
    import javax.servlet.ServletOutputStream; 
    import javax.servlet.http.HttpServletResponse; 

    import net.sf.jasperreports.engine.JREmptyDataSource; 
    import net.sf.jasperreports.engine.JRException; 
    import net.sf.jasperreports.engine.JasperExportManager; 
    import net.sf.jasperreports.engine.JasperFillManager; 
    import net.sf.jasperreports.engine.JasperPrint; 
    import ejb.Service; 
    import ejb.ServiceLocal; 
    import entity.Grade; 

    @ManagedBean 
    @SessionScoped 
    public class GradeManagedBean implements Serializable{ 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 

@EJB 
private ServiceLocal service; 

private int code; 
private String name; 
private Grade grade = new Grade(); 

public GradeManagedBean(){ 

} 
public Grade getGrade() { 
    return grade; 
} 
public void setGrade(Grade grade) { 
    this.grade = grade; 
} 
public ServiceLocal getService() { 
    return service; 
} 
public void setService(Service service) { 
    this.service = service; 
} 
public int getCode() { 
    return code; 
} 
public void setCode(int code) { 
    this.code = code; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 

public void save(ActionEvent actionEvent) throws JRException, IOException{ 
    grade.setCode(code); 
    grade.setName(name); 
    service.saveGrade(grade); 

    String codeString = ""+ grade.getCode() ; 
    Map<String, Object> hm = new HashMap<String, Object>(); 
    hm.put("CODE",codeString); 
    hm.put("NAME",grade.getName()); 
    System.out.println("Test 1"); 
    String fileName = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/Report3.jasper"); 
    System.out.println("Test 2"); 
    File jasper = new File(fileName); 
    JasperPrint print = JasperFillManager.fillReport(jasper.getPath(),hm, new JREmptyDataSource()); 
    System.out.println("Test 3"); 
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
    System.out.println("Test 4"); 
    response.addHeader("Content-disposition", "attachment; filename=Report2.pdf"); 
    System.out.println("Test 5"); 
    ServletOutputStream stream = response.getOutputStream(); 
    System.out.println("Test 6"); 
    JasperExportManager.exportReportToPdfStream(print, stream); 
    System.out.println("Test 7"); 
    stream.flush(); 
    stream.close(); 
    System.out.println("Test 8"); 
    FacesContext.getCurrentInstance().responseComplete(); 
    System.out.println("Test 9"); 

} 

    } 

您的幫助將是非常讚賞

+0

那些'sout'語句跟蹤(save()'方法如何遍歷)?我不認爲你需要一個詳細的會話範圍管理生成賈斯珀報告。 – Tiny 2015-04-02 18:00:28

+0

什麼評估爲null? sout的聲明是 – kolossus 2015-04-02 20:03:52

+0

只是爲了驗證問題,因爲它適應。它在命令按鈕被點擊時被調用。 – Devlopas 2015-04-03 15:58:43

回答

0

我加入了iText的-PDFA-5.5.5罐子解決了這一ISSU 。

這個jar是需要從* .jasper文件生成PDF文件。

我也更新了jasperreports jar到最新版本。