2013-04-17 71 views
10

現狀錯誤JSF 2 ID鏈接

JavaServer Faces的版本:2.1.6

我得到母體複合部件具有兩個嵌套立方厘米。其中一個包含一個HtmlPanelGroup,它有一個組件綁定。我使用該綁定以編程方式將HtmlCommandLink對象添加到HtmlPanelGroup。

讓我們把一些標識:

  • 家長父CC
  • CHILD_FIRST第一個孩子CC,嵌套在父母
  • CHILD_SECOND的第二個孩子CC,嵌套在父母
  • GROUP for PanelGroup,嵌套在CHILD_SECOND中
  • LINK_1爲第一個HtmlCommandLink對象,編程添加到GROUP

期望

我希望以下ID鏈接(與默認javax.faces.SEPARATOR_CHAR):

PARENT (Composite Component, declarative) 
    PARENT:CHILD_FIRST (Composite Component, declarative) 
    PARENT:CHILD_SECOND (Component Component, declarative) 
    PARENT:CHILD_SECOND:GROUP (HtmlPanelGroup, declarative) 
     PARENT:CHILD_SECOND:GROUP:LINK_1 (HtmlCommandLink, programmatically) 

問題

的HtmlCommandLink-對象的ID是錯誤的在第一頁訪問。代替「父母:CHILD_SECOND:GROUP:LINK_1」,ID僅爲「CHILD_SECOND:GROUP:LINK_1」。刷新頁面後,ID正確「父母:CHILD_SECOND:GROUP:LINK_1」。實際上,第二個複合組件(「CHILD_SECOND」)中的每個組件都缺少ID(「父項」)的第一部分。刷新後所有ID都正確。

解決方案

我可能會自動在第一次訪問後刷新頁面。但我不想。

+5

我發現很難理解具體問題,因爲'HtmlPanelGroup'不是'NamingContainer'組件,因此不應該將它的ID前置到命令鏈接子節點。你根本不應該在命令鏈接兒童的ID中看到「GROUP:」。一個真正的SSCCE將極大地幫助更好地理解具體問題。 – BalusC

+0

爲什麼地球上這個問題有10個upvotes?問題是目前的形式沒有一個有效的SSCCE沒有任何意義,因此無法回答。太糟糕了,我無法重新過關近期投票。 – BalusC

+0

@Bluasc我認爲你是對的,這很難弄清楚實際的PanelGroup是否包含組件。 – Sheel

回答

-1

由瀏覽器解釋後的id不喜歡你的想法。據我所知它不超過3級。例如:

<h:form id="form"> 
    <h:panel id="panel"> 
     <h:panel id="panel1"> 
      <h:label id="lab"/> 
     </h:panel> 
     <h:panel id="panel2"> 
     </h:panel>  
    </h:panel> 
</h:form> 

然後標籤的ID將不會形成:panel:panel1:lab但是form:panel:lab。如果你想獲得id的小部件更深,那麼我不能說,但它不會超過3個級別。我可以告訴你如何找到身份證。 你可以只寫頁面,然後在chrome或firefox上查看它,你可以在解釋後看到源代碼。所以你可以得到你想要的ID。

祝你好運!

+1

爲什麼地球上這個答案是upvoted?聲明*「據我所知,它不超過3級」*是純粹的廢話。相關學習資料:http://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier/8644762#8644762請注意,''是**不是** NamingContainer。因此,您在''的客戶端ID中存在':panel'的語句是另一個純粹的廢話。 – BalusC