Wie zu verwenden EL mit <ui:repeat var> im id-Attribut des JSF-Komponente
Habe ich folgenden code:
<ui:repeat var="class2" value="#{bean.list}" varStatus="status">
<h:form id="#{class2.name}">
<h:outputText value="#{class2.name}" />
</h:form>
</ui:repeat>
Allerdings, wenn ich öffnen Sie die Seite, Fehler wie folgt:
Komponente Bezeichner darf keine Zeichenfolge der Länge null
Aber es ist richtig gedruckt, in der <h:outputText>
. Wie wird das verursacht und wie kann ich es lösen?
Die Frage ist, tun Sie wirklich brauchen, dass? Warum erstellen Sie mehrere Formen?
hi, yep, ich habe für jede Zeile ein Formular, bekommen Sie sicher, dass nur diese Zeile bleibt (neben dem outputtext eine Schaltfläche im Lieferumfang enthalten)
...aber ich habe Sie mir erzählen, dass EL funktioniert nicht für die ids, die ich versuchen, zu suchen einen anderen Weg
Finden Sie diese Antwort stackoverflow.com/questions/15114086/...
Wenn man bedenkt, dass
hi, yep, ich habe für jede Zeile ein Formular, bekommen Sie sicher, dass nur diese Zeile bleibt (neben dem outputtext eine Schaltfläche im Lieferumfang enthalten)
...aber ich habe Sie mir erzählen, dass EL funktioniert nicht für die ids, die ich versuchen, zu suchen einen anderen Weg
Finden Sie diese Antwort stackoverflow.com/questions/15114086/...
Wenn man bedenkt, dass
ui:repeat
arbeitet in der Seiten-render-Zeit und c:forEach
während Seite bauen, ich würde Ihnen empfehlen, mit dem zweiten ein.InformationsquelleAutor Niko | 2013-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie EL in die
id
- Attribut des JSF-Komponente, aber die EL-variable zur Verfügung stehen, während Ansicht erstellen, während die JSF-komponentenbaum wird aufgebaut werden. Jedoch, die<ui:repeat>
läuft während view render time, während die HTML-Ausgabe generiert werden, basierend auf JSF-Komponente Baum. Die<ui:repeat var>
ist nicht verfügbar, während der Blick der Erstellung und#{class2.name}
ausgewertetnull
völlig erklärt die Fehlermeldung, die Sie bekam. Es funktioniert in<h:outputText>
ist, denn es läuft während der view-render-Zeit.Wenn Sie ersetzen
<ui:repeat>
durch<c:forEach>
, die ausgeführt wird, während anzeigen erstellen, dann werde es funktionieren, wie Sie intented. Die<c:forEach>
wird nämlich generieren physisch mehrere<h:form>
Komponenten in JSF-komponentenbaum, die jeder individuell generieren Ihre eigenen HTML-Ausgabe (im Gegensatz zu<ui:repeat>
, wobei die gleichen<h:form>
Komponente wieder verwendet mehrere Male zum generieren der HTML-Ausgabe).Aber ich Frage mich wirklich, warum Sie benötigen, zu tun. Es gibt in der Regel keine Notwendigkeit, das dynamische zuweisen von Komponenten-IDs. JSF wird schon sorgen für die Einzigartigkeit der ID. Das folgende Beispiel,
wird am Ende in mehreren Formen mit jeweils eine eindeutige ID, die mit dem Suffix-iteration index der
<ui:repeat>
. Wenn Sie wirklich brauchen, zu verwenden#{class2.name}
für einige JavaScript - /jQuery-Zwecke (du hast nirgendwo Zustand die konkrete funktionale Anforderung in der Frage, für die Sie dachte, dies wäre die richtige Lösung, so ist es nur zu raten), dann nur wickeln Sie es in eine plain-vanilla-HTML-element:Oder legen Sie es als Stil-Klasse von einer JSF-Komponente, die ist auch einfach wählbar über ein CSS-Selektor:
Siehe auch:
InformationsquelleAutor BalusC