p:图表未呈现

时间:2015-08-06 22:38:43

标签: jsf jsf-2 primefaces charts

我正在尝试以下aprouch来显示带有primefaces的基于日期的图表:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:p="http://primefaces.org/ui">
    <ui:composition template="/template/menu.xhtml">
        <ui:define name="content">
            <h:form>
                <p:dataTable value="#{busca.resultado}" var="serie" style="width:1000px">
                    <p:column>
                        <h:panelGrid columns="3" rows="2">
                            <h:outputText value="#{serie.tipoEmTexto()}" />
                            <h:outputText value="#{serie.nome}" />
                            <h:commandButton value="#{busca.controle[busca.resultado.indexOf(serie)] ? 'X' : '+'}" action="#{busca.flip()}">
                                <f:attribute name="serPar" value="#{serie}" />
                                <f:ajax render="'serie_'.concat(#{busca.resultado.indexOf(serie)})" event="click" />
                            </h:commandButton>
                            <h:panelGroup id="serie_#{busca.meuIndice()}" >
                                <f:attribute name="serPar" value="#{serie}" />

                                <h:panelGrid rendered="#{busca.meuControle()}" columns="2">
                                    <f:attribute name="serPar" value="#{serie}" />

                                    <h:outputLabel value="Extrair" />
                                    <h:selectBooleanCheckbox value="#{serie.selecionado}" />

                                    <h:outputLabel value="Série #{serie.periodicidadeComoTexto()}" />
                                    <br />
                                    <p:chart type="line" model="#{busca.graficoReal[busca.resultado.indexOf(serie)]}" style="height:300px;width:400px;" responsive="true"/>
                                </h:panelGrid>
                            </h:panelGroup>
                        </h:panelGrid>
                    </p:column>
                </p:dataTable>
            </h:form>
        </ui:define>
    </ui:composition>
</html>

但是,每当激活“busca.flip()”并渲染panelGroup时,不会渲染任何图形:它只显示为空白。这是LineChartModel对象的创建:

private void carregaGraficoReal(Serie s, int index)
    {
        int i;
        LineChartSeries lcs = new LineChartSeries("Gráfico para " + s.getNome());
        LineChartModel lcm = new LineChartModel();
        List<String> ls = new ArrayList<String>();
        DateAxis da = new DateAxis("Datas"); 
        String data;

        ls.addAll(s.getSerieReal().keySet());
        ls = OrdenadoresDeLista.ordenaDatas(ls);

        for(i = 0; i < ls.size(); i++)
        {
            data = ls.get(i);
            lcs.set(dataParaFormatoPrime(data), s.getSerieReal().get(data));
        }

        da.setMax(ls.get(ls.size() - 1));
        da.setTickAngle(-50);
        da.setTickFormat("%b %#d, %y");
        lcm.addSeries(lcs);
        lcm.getAxis(AxisType.Y).setLabel("Valores");
        lcm.getAxes().put(AxisType.X, da);
        graficoReal[index] = lcm;
    }

对我来说,至少,它似乎与showcase中稳定的一切有关,所以我不知道为什么它不起作用。我正在App Server Glassfish 4.0,JDK 1.7.0,primefaces 5.1和使用JSF 2中运行此应用程序,如果这些信息可以帮助某人确定图表未呈现的原因。

关于我的代码的更多信息:

  • ordenaDatas返回一个字符串列表,这些字符串是日期,按新月顺序排序;
  • dataParaFormatoPrime以“YYYY-mm-dd”格式转换“dd / mm / YYYY”类型的字符串,如展示所示;
  • 为p:dataTable的每个项目正确呈现panelGroup“serie_x”,仅显示图表;

0 个答案:

没有答案