Ich habe ein großes Problem, eine sehr einfache Aufgabe in JSF getan. Das Problem: Ich habe Objekte, die Eigenschaften aggregiert haben, die vom Typ zum Objekt variieren können. Abhängig vom Typ der Eigenschaft möchte ich einen anderen Satz von Eingabefeldern verwenden.<ui:include> mit dynamischen src ... komplette Wahnsinn
Die Subtypenkomponenten befinden sich in Frameworks und werden bei Bedarf geladen. Zu diesem Zweck verwende ich den folgenden Code:
<h:panelGroup id="zusatzdaten">
<fieldset class="clear">
<legend>#{tickerUI.ticker.tickerDescription.label}
(#{tickerUI.ticker.tickerDescId})
</legend>
<h:panelGroup rendered="#{tickerUI.editComponentName != null}">
<ui:include src="#{tickerUI.editComponentName}"/>
</h:panelGroup>
</fieldset>
</h:panelGroup>
Der Name der Komponente kommt aus TickerUI, die von @SessionScope ist. Jetzt das schillernde Bit: Beim ersten Laden wird die richtige Teilkomponente angezeigt. Wenn Sie jedoch einen Link in der Navigation verwenden, der zu einer anderen Komponente führen soll, wird der Inhalt NICHT aktualisiert! Dies führt zu einem Fehler, da die Daten jetzt einen anderen Subtyp haben, aber die Formularkomponenten immer noch von der vorherigen stammen.
Wenn Sie von dem Fehler zurückkommen und erneut auf den Link klicken, wird die korrekte Komponente angezeigt. Ich habe den Wert von editComponentName protokolliert und die richtigen Werte zurückgegeben. Das ist sehr verwirrend. Warum wird der falsche Inhalt eingefügt, wenn der Getter den korrekten Komponentennamen an das src-Attribut zurückgibt?
Hilfe sehr geschätzt.
'' läuft während Ansicht Bauzeit, während Ansicht Zeit machen. Siehe auch http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense –
BalusC
Vielen Dank. Ich bin natürlich noch neu in JSF und dieses JSTL/JSF Render-Zeug ist nicht einfach zu verstehen. Ich fand die Lösung auf Ihrem Blog: ' javax.faces.PARTIAL_STATE_SAVING false param-value> context-param>' –