не работает с использованием простых лиц - PullRequest
1 голос
/ 27 февраля 2012

Я использую JSF 2.0 + Prime Face для веб-проекта.

Мой код 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)

Как это вызвано и как я могу это решить?

Ответы [ 4 ]

1 голос
/ 19 мая 2015

В моем случае я решил исключение нулевого указателя, импортировав правильный пакет.

У меня было следующее

@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, это решило проблему.

1 голос
/ 27 февраля 2012

Кажется, что модель null. Вы createPieModel метод вызваны вообще? Можете ли вы проверить / отладить, что круговая модель не равна нулю во время создания диаграммы?

0 голосов
/ 16 декабря 2014

Вы должны использовать это в своем Java-бобе.

@ManagedBean

@ViewScoped

public class ChartBean implements Serializable {  

    private PieChartModel pieModel;  

    public ChartBean() {  
        createPieModel();  
    } 
 ....
0 голосов
/ 25 апреля 2014

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;
}
...