2015-12-04 4 views
0

Я пытаюсь создать новую диаграмму в PrimeFaces 3.5RC1, но по какой-то причине, когда все данные были собраны и заполнены на графике, она не отображается на экране. Я знаю, что в коде Java нет ничего плохого, потому что он работает, но диаграмма пуста.p: lineChart not rendering

Пожалуйста, см Java и Xhtml код ниже:

Java Bean:

public void searchMonthTotals() { 

    String sql = null; 

    if(retailID.equals("999") && billerID.equals("999")){ 
    sql = "WITH CTE AS(" 
      + " SELECT Value,DAY(IntervalStartTime) AS DAY,MONTH(IntervalStartTime) AS MONTH,YEAR(IntervalStartTime) AS YEAR, " 
      + " CASE WHEN MONTH(IntervalStartTime) = MONTH(GETDATE()) THEN 'Current' ELSE 'Previous' END AS Type " 
      + " FROM [email protected] s (nolock) " 
      + " LEFT OUTER JOIN [email protected] c (nolock) ON s.configId = c.id " 
      + " LEFT OUTER JOIN [email protected] l (nolock) ON s.slotId = l.id " 
      + " WHERE IntervalStartTime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) " 
      + " AND IntervalEndTime <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) " 
      + " AND s.configId = " + configID 
      + " GROUP BY IntervalStartTime,value) " 
      + " SELECT SUM(Value) AS Value, DAY,MONTH,YEAR,Type " 
      + " FROM CTE " 
      + " GROUP BY DAY,Type,MONTH,YEAR " 
      + " ORDER BY Type "; 
    }else if(billerID.equals("999")){ 
     sql = "WITH CTE AS(" 
      + " SELECT cm.Name AS Network,Value,DAY(IntervalStartTime) AS DAY,MONTH(IntervalStartTime) AS MONTH,YEAR(IntervalStartTime) AS YEAR, " 
      + " CASE WHEN MONTH(IntervalStartTime) = MONTH(GETDATE()) THEN 'Current' ELSE 'Previous' END AS Type " 
      + " FROM [email protected] s (nolock) " 
      + " LEFT OUTER JOIN [email protected] c (nolock) ON s.configId = c.id " 
      + " LEFT OUTER JOIN [email protected] l (nolock) ON s.slotId = l.id " 
      + " LEFT OUTER JOIN [email protected] cm (nolock) ON s.networkId = cm.RecID "  
      + " WHERE IntervalStartTime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) " 
      + " AND IntervalEndTime <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) " 
      + " AND s.configId = " + configID 
      + " AND s.networkId = " + retailID 
      + " GROUP BY cm.Name,IntervalStartTime,value) " 
      + " SELECT Network,SUM(Value) AS Value, DAY,MONTH,YEAR,Type " 
      + " FROM CTE " 
      + " GROUP BY Network,DAY,Type,MONTH,YEAR " 
      + " ORDER BY Network,Type "; 
    }else if(retailID.equals("999")){ 
     sql = "WITH CTE AS(" 
      + " SELECT cm.Name AS Biller,Value,DAY(IntervalStartTime) AS DAY,MONTH(IntervalStartTime) AS MONTH,YEAR(IntervalStartTime) AS YEAR, " 
      + " CASE WHEN MONTH(IntervalStartTime) = MONTH(GETDATE()) THEN 'Current' ELSE 'Previous' END AS Type " 
      + " FROM [email protected] s (nolock) " 
      + " LEFT OUTER JOIN [email protected] c (nolock) ON s.configId = c.id " 
      + " LEFT OUTER JOIN [email protected] l (nolock) ON s.slotId = l.id " 
      + " LEFT OUTER JOIN [email protected] cm (nolock) ON s.issuerId = cm.RecID "  
      + " WHERE IntervalStartTime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) " 
      + " AND IntervalEndTime <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) " 
      + " AND s.configId = " + configID 
      + " AND s.networkId = " + retailID 
      + " GROUP BY cm.Name,IntervalStartTime,value) " 
      + " SELECT Biller,SUM(Value) AS Value, DAY,MONTH,YEAR,Type " 
      + " FROM CTE " 
      + " GROUP BY Biller,DAY,Type,MONTH,YEAR " 
      + " ORDER BY Biller,Type "; 
    }else{ 
    sql = " WITH CTE AS(" 
    + " SELECT cm.Name AS Network,co.Name AS Biller,DAY(IntervalStartTime) AS DAY,MONTH(IntervalStartTime) AS MONTH,YEAR(IntervalStartTime) AS YEAR, " 
    + " CASE WHEN MONTH(IntervalStartTime) = MONTH(GETDATE()) THEN 'Current' ELSE 'Previous' END AS Type " 
    + " FROM [email protected] s (nolock) " 
    + " LEFT OUTER JOIN [email protected] c (nolock) ON s.configId = c.id " 
    + " LEFT OUTER JOIN [email protected] l (nolock) ON s.slotId = l.id " 
    + " LEFT OUTER JOIN [email protected] cm (nolock) ON s.networkId = cm.RecID " 
    + " LEFT OUTER JOIN [email protected] co (nolock) ON s.issuerId = co.RecID " 
    + " WHERE IntervalStartTime >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) " 
    + " AND IntervalEndTime <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0)) " 
    + " AND s.configId = " + configID 
    + " AND s.networkId = " + retailID 
    + " AND s.issuerId = " + billerID 
    + " GROUP BY IntervalStartTime,cm.Name,value,co.Name) " 
    + " SELECT Network,Biller, SUM(Value) AS Value,DAY,MONTH,YEAR,Type " 
    + " FROM CTE " 
    + " GROUP BY Network,DAY,MONTH,YEAR,Type,Biller " 
    + " ORDER BY Network,Type "; 
    } 

    try { 
     Connection con = db.getDBConnection(DatabaseTypes.TRANSACTION_DATABASE); 
     ResultSet rs = DatabaseHandler.executeQuery(con, sql); 

     DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     maxTransactions = 0; 
     maxDays = 31; 
     boolean isEmpty = !rs.first(); 
     if (!isEmpty) { 
      monthTotalsPrevious = new ArrayList<MonthlyGraphs>(); 
      monthTotalsCurrent = new ArrayList<MonthlyGraphs>(); 
     } 
     rs.beforeFirst(); 
     while (rs.next()) { 
      MonthlyGraphs t = new MonthlyGraphs(); 
      Calendar cal2 = Calendar.getInstance(); 
      cal2.set(rs.getInt("YEAR"), rs.getInt("MONTH") - 1, rs.getInt("DAY")); 
      t.setDate(dateFormat.format(cal2.getTime())); 
      t.setTotalTransactions(rs.getInt("Value")); 
      t.setDay(rs.getInt("DAY")); 
      if (rs.getString("Type").equals("Current")) { 
       monthTotalsCurrent.add(t); 
      } else { 
       monthTotalsPrevious.add(t); 
      } 
      if (t.getTotalTransactions() > maxTransactions) { 
       maxTransactions = t.getTotalTransactions(); 
      } 
     } 
     rs.close(); 
     con.close(); 
     createCategoryModel(); 

    } catch (Exception e) { 
     FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "An error occurred.", e.getMessage())); 
    } 
} 

private void createCategoryModel() { 

    chartModel = new CartesianChartModel(); 

    ChartSeries dailyTotalsPrevious = new ChartSeries(); 
    dailyTotalsPrevious.setLabel("Previous"); 
    for (int i = 0; i < monthTotalsPrevious.size(); i++) { 
     dailyTotalsPrevious.set(monthTotalsPrevious.get(i).getDay(), monthTotalsPrevious.get(i).getTotalTransactions()); 
    } 
    chartModel.addSeries(dailyTotalsPrevious); 

    ChartSeries dailyTotalsCurrent = new ChartSeries(); 
    dailyTotalsCurrent.setLabel("Current"); 
    for (int i = 0; i < monthTotalsCurrent.size(); i++) { 
     dailyTotalsCurrent.set(monthTotalsCurrent.get(i).getDay(), monthTotalsCurrent.get(i).getTotalTransactions()); 
    } 
    chartModel.addSeries(dailyTotalsCurrent); 


} 

Xhtml страницы:

    <p:toolbar id ="graphtool"> 
         <p:toolbarGroup align="left"> 
          <h:panelGrid columns="6" cellpadding="5" >      

        <p:selectOneMenu id="billIssuerSelect" value="#{graphsBean.billerID}" style="width:250px" > 
              <f:selectItems value="#{generalBean.billIssuerList}" var="b" itemValue="#{b.billIssuerId}" itemLabel="#{b.billIssuerName}"/> 
         </p:selectOneMenu>  

         <p:selectOneMenu id="retailerSelect" value="#{graphsBean.retailID}" style="width: 250px" > 
            <f:selectItems value="#{generalBean.retailerList}" var="r" itemValue="#{r.retailerId}" itemLabel="#{r.retailerName}" />          
           </p:selectOneMenu>  

         <p:selectOneMenu id="configSelect" value="#{graphsBean.configID}" style="width: 250px" > 
            <f:selectItems value="#{graphsBean.configList}" var="r" itemValue="#{r.ID}" itemLabel="#{r.configName}" />          
         </p:selectOneMenu>  

         <p:commandButton id="refreshButton" 
               value="Generate" 
               icon="ui-icon-refresh" 
               update="graph" 
               ajax="true" 
               global="false" 
               actionListener="#{graphsBean.searchMonthTotals()}"/> 


          </h:panelGrid> 
         </p:toolbarGroup> 

         <p:toolbarGroup align="right"> 
          <h:panelGrid columns="2" cellpadding="8" > 
           <h:commandLink> 
            <p:graphicImage style="border: none" value="../resources/excel24.png" /> 
            <p:dataExporter type="xls" target="graph" fileName="Month Graph" /> 
           </h:commandLink> 
          </h:panelGrid> 
         </p:toolbarGroup> 

        </p:toolbar>   

        <p:spacer width="10" height="10" /> 


       <p:panel header="Month Graph"> 
       <p:lineChart id="graph" value="#{graphsBean.chartModel}" style="width:500px;height:300px" 
          minY="0" maxY="#{graphsBean.maxTransactions}" 
          minX="1" maxX="#{graphsBean.maxDays}" 
          showMarkers="false" 
          legendPosition="n" 
          extender="customExtender"/> 
       </p:panel>  

Если кто-то может вести меня в правильном направлении, что было бы здорово.

Благодаря

+2

PrimeFaces 3.5 является «старым», PrimeFaces 3.5RC1 является кандидатом на выпуск «старой» версии. Вы попробовали новую версию? И ваш код содержит много шума. Макет, диалог, материал базы данных ... прочитайте [mcve] и http://www.stackoverflow.com/tags/jsf/info и улучшите свой вопрос – Kukeltje

+0

Привет, я внес изменения, как было предложено, и удалил большую часть ненужных код. Проблема в том, что данные заполняются, но график не хочет отображаться на экране. Я пробовал использовать новую библиотеку, но почему-то все страницы дают проблемы. Я не строил проект, и когда это было сделано, последний выпуск шрифтов был 3.5, поэтому я просто работал над ним. – Noobling

+0

Так что, согласно вашему mcve, он работает, если вы используете данные из статического массива вместо базы данных? И он также работает, если вы удалите панель управления? – Kukeltje

ответ

0

Я решил эту проблему, был код Javascript на странице Xhtml, которые необходимо включить для построения графика.