2013-04-17 6 views
10

SituationFalsche JSF 2 ID

Java Server Faces Chaining Version: 2.1.6

ich mit zwei ineinander geschachtelten cc eine übergeordnete Verbundkomponente bekam. Einer von ihnen enthält eine HtmlPanelGroup, die eine Komponentenbindung aufweist. Ich verwende diese Bindung, um HtmlCommandLink-Objekte programmatisch zur HtmlPanelGroup hinzuzufügen.

Lassen Sie uns einige IDs nennen:

  • ELTERN für die Mutter cc
  • CHILD_FIRST für das erste Kind cc, in ELTERN
  • GROUP
  • CHILD_SECOND für das zweite Kind cc, verschachtelt in ELTERN verschachtelt für die PanelGroup, verschachtelt in CHILD_SECOND
  • LINK_1 für das erste HtmlCommandLink-Objekt, programmatisch hinzugefügt zu GROUP

Erwartung

ich die folgende ID Chaining (mit Standard javax.faces.SEPARATOR_CHAR) erwarten:

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) 

Problem

Die ID des HtmlCommandLink-Objekt ist falsch bei der ersten Seite besuchen. Anstelle von "PARENT: CHILD_SECOND: GROUP: LINK_1" lautet die ID nur "CHILD_SECOND: GROUP: LINK_1". Nachdem ich die Seite aktualisiert habe, ist die ID korrekt "ELTERN: KIND_SECOND: GROUP: LINK_1". Tatsächlich fehlt jeder Komponente in der zweiten zusammengesetzten Komponente ("CHILD_SECOND") der erste Teil der ID ("PARENT"). Nach der Aktualisierung sind alle IDs korrekt.

Lösung

ich die Seite automatisch nach dem ersten Besuch erfrischen könnte. Aber ich will nicht.

+5

Ich finde es schwierig, das konkrete Problem zu verstehen, weil 'HtmlPanelGroup' keine' NamingContainer' Komponente ist und daher nicht dazu gedacht ist, seine ID an untergeordnete Befehlskoppelungen anzuhängen. Sie sollten 'GROUP:' in der ID der Befehlsverknüpfungs-Kinder überhaupt nicht sehen. Ein echter SSCCE würde enorm dazu beitragen, das konkrete Problem besser zu verstehen. – BalusC

+0

Warum in der Welt hat diese Frage 10 upvotes? Die Frage ist in ihrer jetzigen Form, ohne dass ein gültiger SSCCE keinen Sinn ergibt und daher nicht zu verantworten ist. Schade, dass ich eine abgelaufene enge Abstimmung nicht umstellen kann. – BalusC

+0

@Bluasc Ich denke, Sie haben Recht, das ist schwierig herauszufinden, dass die tatsächliche PanelGroup die Komponente enthält oder nicht. – Sheel

Antwort

-1

die ID nach der Interpretation durch den Browser mag nicht, was Sie dachten. Soweit ich weiß, überschreitet es nicht 3 Stufen. Zum Beispiel:

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

dann das ID des Etiketts nicht seine Form: Platte: panel1: lab aber Form: Platte: lab. Wenn das Widget, das Sie die ID erhalten möchten, tiefer ist, dann kann ich nicht sagen, aber es wird nicht mehr als 3 Ebenen. Ich kann dir sagen, wie man die ID findet. Sie können nur die Seite schreiben, und dann sehen Sie es auf dem Chrom oder Firefox, wo Sie den Quellcode nach der Interpretation sehen können. So können Sie die gewünschte ID erhalten.

viel Glück!

+1

Warum in der Welt ist diese Antwort hochgestuft? Die Aussage * "soweit ich weiß, dass sie 3 Ebenen nicht überschreitet" * ist purer Unsinn. Zugehöriges Lernmaterial: http://stackoverflow.com/questions/8634156/how-to-reference-components-in-jsf-ajax-cannot-find-component-with-identifier/8644762#8644762 Beachten Sie, dass das '' ist ** nicht ** ein 'NamingContainer'. Ihre Aussage, dass ': panel' in der Client-ID von' ' vorhanden wäre, ist daher ein weiterer reiner Unsinn. – BalusC