Sie sehen, warum sie nicht lassen Sie die ID, richtig? JSF übernimmt die Erstellung von IDs, weil Sie sich in einer wiederholten Schleife von Komponenten befinden. Wenn Sie die ID einfach festlegen, erhalten Sie doppelte IDs, was Ihnen ohnehin nicht weiterhilft.
Ohne zu wissen, WARUM Sie die ID explizit festlegen möchten, ist es schwierig, einen Workaround zu geben. Wenn es für JavaScript ist, können Sie tun, was Grant Wagner vorschlägt, und JSF Ihnen geben lassen, was es als die ID setzte. Sie können auch einen Blick auf dem generierten HTML-Code und sehen, welches Format der ID in ist. JSF in der Regel verwendet
"form_id:loop_id:loop_index:component_id"
als id es für Komponenten in einer Form/Wiederholung erzeugt. Du musst dir sicher sein und deinem Formular und der ID IDs geben: wiederhole die Tags, um zu wissen, was sie waren.
Ok, Sie haben geantwortet, dass Sie ein h: Message-Tag für einen bestimmten inputText innerhalb der Schleife haben wollen, das ist einfach.
<h:inputText id="myInput" .... />
<h:message for="myInput" ... />
Nun Nachrichten für die Eingabe generiert werden in der Meldung angezeigt, und JSF wird mangle das Attribut „for“ nur (obwohl das nicht in HTML erzeugt wird), wie es wird das Attribut „id“ in der inputText, damit sie übereinstimmen.
Sie können sogar Ihre eigenen Nachrichten in Ihrem Handler-Code machen, um zu der spezifischen h: -Nachricht zu gelangen, aber Sie müssen einen Aufruf von clientId verwenden, um das Ziel der Nachricht zu erhalten, wenn die Backing-Bean (nicht die Backing-Bean) der betreffenden Komponente.
Whoops. Ich habe das für eine Weile nicht gemacht, nicht ich. Ich verstehe, warum ich IDs in einer Schleife nicht zuweisen kann, aber ich weiß, was ich einstellen, da die ID (LabelKey) für jede Iteration über die Schleife eindeutig sein wird. –
Was ich erreichen möchte, möchte ich einen Weg kennen, wie ich die h: inputText & h: Nachricht zusammen in der Schleife verknüpfen kann. Wenn also eine Validierung beim Eingabetext fehlschlägt, kann ein Fehler in der zugehörigen Nachrichtenbox auftreten. –
Ich denke, ich muss es einfach anders machen und habe einfach eine allgemeine Nachricht für alle Felder, die bei der Dropdown-Änderung angezeigt werden. Entschuldigen Sie die mehrfachen Kommentare - Konnte nicht alles in 300 Buchstaben passen! –