嵌套的ui:重复条件计数器

时间:2015-07-22 21:23:19

标签: jsf jsf-2 counter facelets uirepeat

JSF 2.1

我试图有条件地构建一些div标签 div标签的DOM id -

必须具有以下格式
jquery_jplayer_#  // where # is an integer

其他要求:

生成的HTML应如下所示 -

<div id="jquery_jplayer_1" class="jp-jplayer" style="width: 0px; height: 0px;">
  .
  .
  .
</div>
<div id="jquery_jplayer_2" class="jp-jplayer" style="width: 0px; height: 0px;">
  .
  .
  .
</div>

以下是我当前尝试执行此操作的代码:

<ui:repeat value="#{accessibilityTagging.previewTagsOrderByCurrentlySelectedOrderType}" var="currentTag" varStatus="loop_1">
  <ui:repeat value="#{accessibilityTagging.accessibilityElements}" var="accessibilityElement" varStatus="loop_2">
    <ui:repeat value="#{accessibilityElement.featureList}" var="feature" varStatus="loop_3">
      <h:panelGroup rendered="#{feature.feature eq 1">
         <!-- some irrelevant stuff happening here -->
      </h:panelGroup>
      <h:panelGroup rendered="#{feature.feature eq 2}">
         <!-- relevant stuff happens here! -->
         <div id="jquery_jplayer_#{loop_1.index + loop_2.index + loop_3.index + 1}" class="jp-jplayer"></div>
         <div id="jp_container_#{loop_1.index + loop_2.index + loop_3.index + 1}" class="jp-audio">
           <div class="jp-type-single">
             <div class="jp-gui jp-interface">
               <ul class="jp-controls">
                 <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>
                 <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>
                 <li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>
                 <li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>
                 <li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>
                 <li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>
               </ul>
               <div class="jp-progress">
                 <div class="jp-seek-bar">
                   <div class="jp-play-bar"></div>
                 </div>
               </div>
               <div class="jp-volume-bar">
                 <div class="jp-volume-bar-value"></div>
               </div>
               <script type="text/javascript">
                 //<![CDATA[
                 $(document).ready(function(){
                   $("#jquery_jplayer_#{loop_1.index + loop_2.index + loop_3.index + 1}").jPlayer({
                     ready: function (event) {
                       $(this).jPlayer("setMedia", {
                         mp3: "#{ttsManager.serverURL}/TTSServlet?text="+encodeURI('#{feature.info}')
                       });
                     },
                     swfPath: "/common/js",
                     supplied: "mp3, m4a, oga",
                     wmode: "window",
                     smoothPlayBar: true,
                     keyEnabled: true,
                     remainingDuration: false,
                     toggleDuration: false,
                     errorAlerts: true
                   });
                 });
                 //]]>
               </script>
       </h:panelGroup>
     </ui:repeat>
   </ui:repeat>
 </ui:repeat>

我有两个问题:

  1. 最内层循环在完成迭代后将varStatus重置为0
  2. varStatus索引值以0.开头我需要它从1.开始
  3. 有关如何解决此问题的任何建议? (有没有办法将当前计数器存储在变量或隐藏字段中?)

    我不想使用JSTL(例如<c:set>,因为这会将JSF组件与JSP混合)。

0 个答案:

没有答案