我正在尝试以下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中运行此应用程序,如果这些信息可以帮助某人确定图表未呈现的原因。
关于我的代码的更多信息: