在p:chart

时间:2016-11-09 21:15:29

标签: jsf primefaces jqplot

我正在使用Primefaces 5.3并尝试允许用户通过单击相应的图例项来打开和关闭系列。

因为primefaces 5.3在EnhancedPieLegendRenderer中不包含jqplot.txt,所以我在resources / js中手动添加它并将其导入到我的项目中。我的扩展程序的代码位于同一目录中名为charts.js的文件中。

在我的.xhtml文件中,我引入了这样的文件

 <ui:composition template="/templates/template.xhtml">
   <ui:define name="body">
    <h:outputScript name="js/jqplot.pieRenderer.js"/>
    <h:outputScript name="js/extendedPieRenderer.js"/>
    <h:outputScript name="js/jqplot.enhancedPieLegendRenderer.js"/>
    <h:outputScript name="js/charts.js"/>

饼图本身的xhtml看起来像

<p:chart id="outboundLanChart" 
         type="pie" 
         model="#{foo.bar}"/>

底层PieChartModel对象或支持bean没什么特别的,一切都很好。在用户导航到页面时调用的init方法中,我设置了对象的扩展器bar.setExtender("extnd");

在charts.js中我有

function extnd() {

  this.cfg.seriesDefaults = {
    renderer: $.jqplot.PieRenderer
  }

  this.cfg.legend = {
    renderer: $.jqplot.EnhancedPieLegendRenderer,
    show: true,
    rendererOptions: {
        seriesToggle: 'normal',
        seriesToggleReplot: true
    }
  }

}

我知道扩展器正在工作,因为我的荧光笔配置完全符合我的预期(我没有包含那段代码,因为它与问题无关)。对console.log进行this.cfg.legend检查表明,EnhancedPieLegendRenderer属性未使用legend.renderer。到目前为止,搜索谷歌,StackOverflow,primefaces论坛和各种文档和源代码并没有产生任何好结果。 是否有可能获得使用EnhancedPieLegendRenderer的primefaces,或者是否有另一种更合适的Primefaces方式允许用户在饼图上或饼图中切换系列?

更新:在Kukeltje的建议下,我添加了pieRendererextendedPieRenderer插件并相应地更新了我的js代码。这可能是个问题但不是问题,问题仍然存在。

2 个答案:

答案 0 :(得分:1)

通过一些关于'EnhancedPieLegendRenderer'的非常简单的谷歌搜索,我发现'EnhancedLegendRenderer'对于原生jqplot不能正常工作:jqPlot EnhancedLegendRenderer plugin does not toggle series for Pie charts。并且他们创建了您似乎正在使用的EnhancedPieLegendRenderer,但它需要与extendedPieRenderer结合使用。由于您似乎没有使用后者,这就是实际问题。

答案 1 :(得分:0)

显然extendedPieRendererenhancedPieLegendRenderer无法使用5.3正在使用的jqplot Primefaces版本。

抓取最新版本并将我的脚本更改为

 <h:outputScript name="js/jqplot.1.0.9/jquery.jqplot.js"/>
 <h:outputScript name="js/jqplot.1.0.9/plugins/jqplot.pieRenderer.js"/>
 <h:outputScript name="js/jqplot.1.0.9/plugins/jqplot.enhancedPieLegendRenderer.js"/>

解决了这个问题。