【发布时间】:2011-07-30 07:37:58
【问题描述】:
我知道这可能与每个人所处的阶段有关。
如果我这样做。
<ui:repeat id="repeatChart" varStatus="loop" value="#{viewLines.jflotChartList}" var="jflotChart">
<p:panel>
<jflot:chart height="300" width="925" dataModel="#{jflotChart.dataSet}" dataModel2="#{jflotChart.dataSet2}"
xmin="#{jflotChart.startDateString}"
xmax="#{jflotChart.endDateString}"
shadeAreaStart ="#{jflotChart.shadeAreaStart}"
shadeAreaEnd ="#{jflotChart.shadeAreaEnd}"
lineMark="#{jflotChart.wrapSpec.benchmark}" yMin="#{jflotChart.yMin}" yMax="#{jflotChart.yMax}" />
</p:panel>
<br />
</ui:repeat>
我的代码不起作用。调试 javascript 表明每次迭代都会生成相同的 id。我试过把 loop.index 来创建一个 id,这给了我一个错误,说 id 不能为空。
如果我将 ui:repeat 换成 c:forEach 就可以了。调试 javascript 显示每次迭代都会创建一个新 id。
这是我的支持代码(其中一些)。
<div id="#{cc.id}_flot_placeholder" style="width:#{cc.attrs.width}px;height:#{cc.attrs.height}px;">
<script type="text/javascript">
//<![CDATA[
$(function () {
var placeholder = $("##{cc.id}_flot_placeholder");
var overviewPlaceholder = $("##{cc.id}_flot_overview");
id 需要不同,以便 javascript 可以呈现到正确的 div。我尝试明确定义一个 id 属性,然后将其作为 id 传递给客户端代码。就像我之前说的那样,这不起作用。感谢您的帮助。
**编辑**
这是我的问题。由于冒号字符,我不能在 div 标签中使用 clientId。我已经在 javascript 中对其进行了修改,但我将如何将该值传递给 div。我无法通过 id 获取 div 标签,因为我需要生成 id。我似乎也不能做一个 document.write() 。我被困在这一点上。
<composite:implementation>
<div id="#{cc.clientId}_flot_placeholder" style="width:400px;height:400px;">
<script type="text/javascript">
//<![CDATA[
$(function () {
var clientIdOld = '#{cc.clientId}';
var clientId = clientIdOld.replace(':', '_');
var placeholder = $('#'+clientId+'_flot_placeholder');
var overviewPlaceholder = $('#'+clientId+'_flot_overview');
【问题讨论】:
-
你的问题有点混乱。 what 的
id相同?您仅在<ui:repeat>上拥有它,但在<ui:repeat>上根本不支持此属性。支持代码似乎是一个复合组件。是<jflot:chart>吗? -
在复合组件中,它将 id 作为不同的占位符变量。这个占位符(div)也是flot(图表库)用来显示图表的。如果我使用 c:forEach 生成的 id 就像每个循环的 jdt:78、jdt:79 等。如果我使用 ui:repeat ,则 id 是相同的。 jdt:78,jdt:78,jdt:78。所以有一个 div 具有相同的 id 5 或 6 次。
-
对了。恐怕这是
<ui:repeat>上的众多问题之一。 java.net/jira/secure/QuickSearch.jspa?searchString=ui:repeat 哪个 JSF 实现/版本? -
啊。我不能休息。我正在使用 Mojarra。我现在在家,所以我现在不确定版本。我今天把笔记本电脑忘在工作上了。我该怎么办?我不能真正使用 c:forEach 因为这会降低我的页面性能,因为它会为每个请求调用构造函数。