2012-02-27 38 views
1

我正在使用JSF 2.0 + Prime面向web項目。<p:pieChart>不能使用primefaces

我的XHTML代碼是這樣的:

<p:pieChart id="sample" value="#{chartBean.pieModel}" legendPosition="w" 
        title="Sample Pie Chart" style="width:400px;height:300px" /> 

而Java文件中的代碼是這樣的:

public class ChartBean implements Serializable { 

    private PieChartModel pieModel; 

    public ChartBean() { 
     createPieModel(); 
    } 

    public PieChartModel getPieModel() { 
     return pieModel; 
    } 

    private void createPieModel() { 
     pieModel = new PieChartModel(); 

     pieModel.set("Brand 1", 540); 
     pieModel.set("Brand 2", 325); 
     pieModel.set("Brand 3", 702); 
     pieModel.set("Brand 4", 421); 
    } 
} 

任何同時要運行該代碼收到此錯誤:

java.lang.NullPointerException 
    org.primefaces.component.chart.pie.PieChartRenderer.encodeData(PieChartRenderer.java:68) 
    org.primefaces.component.chart.pie.PieChartRenderer.encodeScript(PieChartRenderer.java:51) 
    org.primefaces.component.chart.pie.PieChartRenderer.encodeEnd(PieChartRenderer.java:36) 
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 
    javax.faces.render.Renderer.encodeChildren(Renderer.java:168) 
    javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845) 
    org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:57) 
    org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:45) 
    org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51) 
    javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1764) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    javax.faces.component.UIComponent.encodeAll(UIComponent.java:1760) 
    com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:402) 
    com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131) 
    com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121) 
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) 

如何這是造成的,我該如何解決?

+1

什麼是你bean的範圍是什麼? – 2012-02-27 07:37:42

+0

ManagedBean ViewScoped這兩個我用 – Ghanshyam 2012-02-27 07:46:33

+0

看來你的模型是'null'。您可以驗證/調試圖表創建時餅圖模型不爲空嗎? – 2012-02-27 07:59:34

回答

1

看來,該模型是null。方法是否調用createPieModel?您可以驗證/調試圖表創建時餅圖模型不爲空嗎?

0

XHTML頁面:

<p:pieChart id="sample" value="#{yourView.chartBean.pieModel}" legendPosition="w" 
       title="Sample Pie Chart" style="width:400px;height:300px" /> 

在您的視圖(懶惰初始化只是一個例子):

private ChartBean chartBean; 

public ChartBean getChartBean() { 
    if (chartBean == null) { 
    chartBean = new ChartBean(); 
    } 
    return chartBean; 
} 
public void setChartBean(ChartBean chartBean) { 
    this.chartBean = chartBean; 
} 
0

你應該在你的java bean這樣使用。

@ManagedBean 

@ViewScoped 

public class ChartBean implements Serializable { 

    private PieChartModel pieModel; 

    public ChartBean() { 
     createPieModel(); 
    } 
.... 
1

在我來說,我通過導入正確的包解決了空指針異常。

我有以下

@Named("chartBean") 
@ViewScoped 
public class ChartBean implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 
    private PieChartModel model; 

    public ChartBean() 
    { 
    model = new PieChartModel(); 
    model.set("Brand 1", 540); 
    model.set("Brand 2", 325); 
    model.set("Brand 3", 702); 
    model.set("Brand 4", 421); 
    } 

    public PieChartModel getModel() 
    { 
    return model; 
    } 
} 

但是當我進口的包,我選擇錯javax.faces.bean.ViewScoped。 當我更改爲javax.faces.view.ViewScoped時,它解決了問題。

相關問題