2013-04-17 7 views
10

Tình hìnhsai JSF 2 ID Chaining

JavaServer Faces Version: 2.1.6

tôi có một thành phần hỗn hợp cha mẹ với hai cc lồng nhau. Một trong số chúng chứa một HtmlPanelGroup, trong đó có một thành phần ràng buộc. Tôi sử dụng liên kết đó để lập trình thêm HtmlCommandLink-Objects vào HtmlPanelGroup.

Hãy gọi số ID:

  • PHỤ HUYNH cho cc mẹ
  • CHILD_FIRST cho cc đứa con đầu lòng, lồng trong PARENT
  • CHILD_SECOND cho cc đứa con thứ hai, lồng trong PARENT
  • GROUP cho nhóm PanelGroup, được lồng trong CHILD_SECOND
  • LINK_1 cho HtmlCommandLink-Object đầu tiên, được thêm vào nhóm

vọng

tôi mong đợi ID Chaining sau (với mặc định 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) 

Vấn đề

ID của HtmlCommandLink-Object là sai tại lần truy cập trang đầu tiên. Thay vì "PARENT: CHILD_SECOND: GROUP: LINK_1", ID chỉ là "CHILD_SECOND: GROUP: LINK_1". Sau khi tôi làm mới trang, ID chính xác là "PARENT: CHILD_SECOND: GROUP: LINK_1". Trong thực tế, mọi thành phần trong thành phần hỗn hợp thứ hai ("CHILD_SECOND") thiếu phần đầu tiên của ID ("PARENT"). Sau khi làm mới tất cả các ID là chính xác.

Giải pháp

tôi có thể tự động làm mới trang sau khi lần đầu tiên. Nhưng tôi không muốn.

+5

Tôi thấy khó hiểu vấn đề cụ thể vì 'HtmlPanelGroup' không phải là thành phần' NamingContainer' và do đó không được phép thêm ID của nó vào liên kết lệnh con. Bạn không nên nhìn thấy 'GROUP:' trong ID của liên kết command children. SSCCE thực sự sẽ giúp ích rất nhiều trong việc hiểu vấn đề cụ thể tốt hơn. – BalusC

+0

Tại sao trong câu hỏi này có 10 câu trả lời? Câu hỏi là ở dạng hiện tại của nó mà không có một SSCCE hợp lệ không có ý nghĩa gì, và do đó không chịu trách nhiệm. Quá tệ đến nỗi tôi không thể bỏ lại phiếu bầu đã hết hạn. – BalusC

+0

@Bluasc Tôi nghĩ rằng bạn là đúng này rất khó để tìm ra thực tế PanelGroup có chứa các thành phần hay không. – Sheel

Trả lời

-1

id sau khi được trình duyệt giải thích không giống như những gì bạn nghĩ. theo như tôi biết nó không vượt quá 3 cấp độ. Ví dụ:

<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> 

thì id của nhãn sẽ không có dạng: bảng điều khiển: panel1: lab nhưng form: panel: lab. nếu các widget mà bạn muốn nhận được id là sâu sắc hơn, sau đó tôi không thể nói nhưng nó sẽ không vượt quá 3 cấp độ. tôi có thể cho bạn biết cách tìm id. bạn chỉ có thể viết trang, và sau đó xem nó trên chrome hoặc firefox nơi bạn có thể nhìn thấy mã nguồn sau khi giải thích. để bạn có thể lấy id bạn muốn.

chúc may mắn!

+1

Tại sao trong trái đất câu trả lời này lại được bình chọn? Tuyên bố * "theo như tôi biết nó không vượt quá 3 cấp độ" * là vô nghĩa thuần khiết. Tài liệu học tập có liên quan: http://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier/8644762#8644762 Lưu ý rằng ' 'là ** not ** a 'NamingContainer'. Câu lệnh của bạn rằng ': panel' sẽ có mặt trong ID khách hàng của' 'do đó là một điều vô nghĩa thuần túy khác. – BalusC