dynamische ui:include mit ui:fragment: Komponente mit gerenderten false immer noch im inneren Komponente Baum
Ich bin Kraft zu verwenden eine sehr alte version von MyFaces 2.0.5 denke ich, und dynamische, die mit EL dazu führen, dass so viel Probleme, also schalte ich auf statische, die mit ui:fragment
<ui:fragment rendered="#{filtersPopup.filterFileName == 'checkBoxFilters'}">
checkBoxFilters
<ui:include src="/analytics/checkBoxFilters.xhtml" rendered="#{filtersPopup.filter != null}"/>
</ui:fragment>
<ui:fragment rendered="#{filtersPopup.filterFileName == 'DateRelativeFilter'}">
DateRelativeFilter
<ui:include src="/analytics/DateRelativeFilter.xhtml" rendered="#{filtersPopup.filter != null}"/>
</ui:fragment>
<ui:fragment rendered="#{filtersPopup.filterFileName == 'listboxFilter'}">
listboxFilter
<ui:include src="/analytics/listboxFilter.xhtml" rendered="#{filtersPopup.filter != null}"/>
</ui:fragment>
Mit diesem, ist es immer noch Klagen über doppelte id, weil ich mit derselben id auf Paare dieser source-Datei. Es scheint also, dass auch rendered
sollte false
, Sie machen es immer noch um die Komponente Baum. Aber doppelte id ist in Ordnung. Kann ich das beheben, dass einfach, wenn ich jetzt also ein Formular Einreichen, ich habe diese Ausnahme
/analytics/checkBoxFilters.xhtml at line 24 and column 118 value="#{filtersPopup.filter.groups}": Property 'groups' not found on type ListBoxFilter
so wie Sie sehen können aus die Ausnahme, es ListBoxFilter
ist das Objekt, das ich will, also nur zählen ListBoxFilter.xhtml, aber auf den zugegriffen wird checkBoxFilters.xhtml
daher der Fehler. Jede Idee, wie dieses Problem zu beheben, bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
<ui:include>
erweitern nicht vonUIComponent
. Es ist ein tag-handler. Es spielt also keine Unterstützung für dierendered
Attribut überhaupt. Es ist auch nirgendwo aufgeführt, die in der tag-Dokumentation.<ui:fragment>
ist in der Tat einUIComponent
. Also im Grunde Sie am Ende mit alle diese 3 include-Dateien aufgenommen werden, während anzeigen, erstellen Zeit-und damit alle 3 körperlich am Ende im JSF-komponentenbaum. Es ist nur die HTML-Ausgabe bedingt gerendert über<ui:fragment rendered>
. Haben Sie am Ende trotzdem mit doppelten Komponenten-IDs von denen gehört, weil Sie alle am Ende in JSF-Komponente Baum.Sollten Sie ein taghandler wie
<c:if>
statt<ui:fragment>
bedingt zu bauen, die JSF-Komponenten-Baum.So, theoretisch sollte dies für jeden von Ihnen:
Diese hat jedoch einige Einschränkungen, wenn
#{filtersPopup}
ist eine Ansicht scoped bean, und/oder wenn Sie mit<f:viewParam>
:Dies erfordert mindestens Mojarra 2.1.18 Vorhandensein, sonst JSF-view-scoped beans werden nicht zur Wiederherstellung.
Taghandlers ausgeführt werden, während anzeigen erstellen. Also Dinge, die läuft danach wie
<f:viewParam>
funktioniert nicht bei allen. Müssten Sie zurückgreifen, um manuell grabben HTTP-request-Parameter überExternalContext
.Siehe auch:
filtersPopup
ist eine SessionScoped, ist das gut genug, BalusC?<f:viewParam>
problem weiterhin besteht. WennfilterFileName
oderfilter
(in)direkt davon abhängen<f:viewParam>
, dann wird es scheitern.c:if
wie u schon oben, wenn ich das Formular Absenden lief ich in diese Ausnahmejava.lang.IllegalStateException: Error restoring component: j_id52 at org.apache.myfaces.view.facelets.DefaultFaceletsStateManagementStrategy.restoreStateFromMap(DefaultFaceletsStateManagementStrategy.java:51 .. Caused by: java.lang.ClassCastException: [Ljava.lang.Object; incompatible with javax.faces.component._DeltaList
. Wenn ich nur noch 1ui:include
dann alles korrekt funktioniert. Jede Idee, BalusC. Danke