2013-08-16 19 views
0

我使用Primefaces與鑽嘴魚科和已經注意到,每個動態P的作用下,樹上標籤上找到相同的ID爲什麼我會爲p:tab兒童獲得相同的ID後綴?

<p:tabView id="customerData" value="#{documentTabView.documentTabs}" var="tab" dynamic="true"> 
    <p:tab title="#{tab.title}" closable="#{tab.closable}" > 
     <p:panel> 
     <h:outputText value="test_#{tab.title}"/> 
     </p:panel> 
    </p:tab> 
</p:tabView> 

生成的HTML如下:

<div id="customerData" class="ui-tabs ui-widget ui-widget-content ui-corner-all ui-hidden-container ui-tabs-top"> 
    <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" role="tablist"> 
     <li class="ui-state-default ui-tabs-selected ui-state-active ui-corner-top" role="tab" aria-expanded="true"><a href="#customerData:0:j_idt21">all documents</a></li> 
     <li class="ui-state-default ui-corner-top" role="tab" aria-expanded="false"><a href="#customerData:1:j_idt21">other documents</a><span class="ui-icon ui-icon-close"></span></li> 
    </ul> 
    <div class="ui-tabs-panels"> 
     <div id="customerData:0:j_idt21" class="ui-tabs-panel ui-widget-content ui-corner-bottom" role="tabpanel" aria-hidden="false"> 
     <div id="customerData:0:j_idt46" class="ui-panel ui-widget ui-widget-content ui-corner-all"> 
      <div id="customerData:0:j_idt46_content" class="ui-panel-content ui-widget-content">test_all documents</div> 
     </div> 
     <script id="customerData:0:j_idt46_s" type="text/javascript">PrimeFaces.cw('Panel','widget_customerData_0_j_idt46',{id:'customerData:0:j_idt46'});</script> 
     </div> 
     <div id="customerData:1:j_idt21" class="ui-tabs-panel ui-widget-content ui-corner-bottom ui-helper-hidden" role="tabpanel" aria-hidden="true"></div> 
    </div> 
    <input type="hidden" id="customerData_activeIndex" name="customerData_activeIndex" value="0" autocomplete="off" /> 
</div> 

能否請您解釋一下爲什麼相同的ID(這裏是j_idt21)正在使用兩次。我知道它是由Tab索引作爲前綴,但我想知道它是否存在強制擁有其他(和不同)ID的解決方案。

+0

對於每個人downvotes問題(或答案),請提供原因。 –

+0

@Xtreme:這可能是因爲原始問題中的HTML完全通過'<'和其他所有格式轉義出來,這使得很難修復糟糕的格式。這可能會讓編輯的幫助意圖完全瘋狂。問題在於它自己可以回答。 – BalusC

回答

3

因爲有其產生非常同一塊取決於當前迭代輪<p:tabView value> HTML多次的僅一個<p:tab>組件。

如果您對自動生成的ID感到困擾,請給<p:tab>一個固定的ID。

<p:tab id="tab" ...> 

如果您擔心通過固定ID區分標籤, JavaScript,然後把它的內容放在一個普通的HTML <div>中,它的id是根據當前迭代的項目生成的。例如。

<p:tab ...> 
    <div id="#{tab.name}"> 
     ... 
    </div> 
</p:tab> 
+0

謝謝你的答案,但基於我的測試,使用EL定義id不被接受,因爲它引發了空指針異常。我從不同的閱讀中瞭解到,在評估EL之前,「id」標籤已初始化。因此,我有這樣的感覺,在我描述的情況下,每個標籤都不能有不同的ID。 – Eric

+0

重讀你的迴應,我注意到你提到了「純HTML」標籤,也許這是一個主要區別,在這種情況下,它可能會像你寫的那樣工作。我會嘗試。謝謝。 – Eric

+0

'id'(和'binding')屬性在視圖構建時間期間被評估,然而''值在視圖渲染時間期間運行。另見http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC

相關問題