我在 WebSphere Application Server 8 上使用 JSF 2.0 (Apache myFaces)。
我有一个包含图表列表(jquery HighCharts 的数据)的 bean。对于每个图表,我需要一些 JSF 组件 + 一个写成 CompositeCompoent 的 Highchart Wrapper(看这里)
所以我像这样使用 jsf 2 的 ui:repeat 函数:
<?xml version="1.0" encoding="UTF-8" ?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:hc="http://java.sun.com/jsf/composite/chartComponents"
template="/template/mytemplate.xhtml">
<ui:define name="content">
<ui:repeat value="#{chartCtrl.charts }" var="chart" id="chartrepeat" varStatus="chartStatus">
#{chartStatus.index }
<h:form id="chartform_#{chartStatus.index }">
<!-- some jsf select stuff-->
</h:form>
#{chartStatus.index }
<hc:Chart title="Statistics" id="hcchart_#{chartStatus.index }"
<!-- here's the problem-->
<ui:repeat value="#{chart.series }" var="serie">
<hc:ChartSeries series="#{serie.data }" />
</ui:repeat>
</hc:Chart>
#{chartStatus.index }
</p:panel>
</ui:repeat>
<h:outputScript library="js" name="highcharts.js" />
<h:outputScript library="js/modules" name="exporting.js" />
<h:outputScript library="js" name="jquery-1.9.1.min.js" target="head" />
</ui:define>
</ui:composition>
#{chartStatus.index } 在任何地方都有效,但在 hc:Chart id="" 中无效。这个 CC 生成的 js 和 div 包含 id 'hcchart_chartdiv'。当前重复左的索引。
如何将正确的数字传递给 id 属性?
编辑:复合组件
这是 hc:Chart 的一部分,应该使用 ID
<cc:implementation>
<div id="#{cc.id}_chartDiv" />
<!-- Highcharts -_>
<script type="text/javascript">
$(function() {
// Data must be defined WITHIN the function. This prevents
// different charts using the same data variables.
var options = {
credits : {
enabled : false
},
chart : {
renderTo : '#{cc.id}_chartDiv',
....
</script>
当我将 hc:Chart 中的属性 ID 留空时,生成的 ID 类似于“j_id568185923_1_5f9521d0_chartDiv”。但仍然没有:row:。
编辑 2:IndexOf Approach 我测试了另一种设置图表 ID 的方法。
id="hc_#{chartCtrl.charts.indexOf(chart) }"
我尝试使用我的 ArrayList 的 IndexOf 方法。我在所有类中实现了 HashCode 和 Equals 方法。当我测试它时,它工作正常。但是当我将它与 EL 一起使用时,我得到 -1 返回。
解决方案 正如 BalusC 所说,我不能为 EL 使用 ID 标签。所以我简单地在我的 CC 中创建了一个新属性。这很好用(就是这么简单)。
谢谢BalusC。
有人有其他想法吗?