1

我正在尝试使用 PrimeFaces (V8.0 / 7.0) 生成饼图。下面是演示代码。 注意- 我在 Glassfish5 上运行这个演示

import javax.annotation.PostConstruct;
import javax.inject.Named;
import org.primefaces.model.chart.PieChartModel;

@Named
public class PieDemoMBean {

    private PieChartModel model;

    @PostConstruct
    public void init(){
        model=new PieChartModel();
        model.set("Red", 25);
        model.set("Green", 25);
        model.set("Blue", 25);
        model.set("Black", 25);
        model.setShowDataLabels(true);
    }

    public PieChartModel getModel() {
        return model;
    }

}

和 JSF 页面

<html xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <h1>Pi Chart Demo</h1>
        <div>
            <p:chart type="pie" responsive="true" model="#{pieDemoMBean.model}"/>

        </div>

    </h:body>
</html>

最后是错误日志

Error Rendering View[/PiDemo.xhtml]
java.lang.NullPointerException
    at org.primefaces.component.chart.renderer.PieRenderer.encodeData(PieRenderer.java:43)
    at org.primefaces.component.chart.renderer.BasePlotRenderer.render(BasePlotRenderer.java:38)

请指教。

4

1 回答 1

1

现在问题已经解决,因为我对代码进行了一些更改并将饼图构造从 init() 方法移动到 getModel() 方法,如下所示 -

@PostConstruct
public void init(){

}

public PieChartModel getModel() {
        model=new PieChartModel();
        model.set("Red", 25);
        model.set("Green", 25);
        model.set("Blue", 25);
        model.set("Black", 25);
        model.setShowDataLabels(true);
        return model;
    }

新代码完美运行!!(虽然我很困惑,因为托管 Bean 是 RequestScoped 并且 init() 方法中的代码应该同样有效)

于 2020-04-10T08:43:25.497 回答