# [JSF] Dynamische Includes (iterative includes)



## JasonV (5. Nov 2009)

Moin,

ich habe ein kleines Problem. Und zwar sieht der Aufbau meiner Web-Applikation vor, dass ich unterschiedlich viele includes machen müsste um den Hauptbereich der Seite zu füllen. Quasi iterativ einbetten.

Ich verdeutliche das mal: meine Anwendung hat einen festen Aufbau mit Menü, Header etc. und dann im Hauptbereich Platz für das, was ich eigentlich anzeigen möchte. Ich habe dazu eine Bean mit einer Liste von Views, die eingebunden werden sollen. Wichtig ist dabei aber, dass ich einen Parameter an diese View (also JSP) geben kann, da eine View unter Umständen mehrfach (mit anderen Werten) ausgegeben werden kann.

Aber genau dies ist nun das Problem. Mein Ansatz war bisher:


```
<c:forEach var="currentView" items="#{user.views}">
  <jsp:include page="#{currentView.viewId}" flush="true">
    <jsp:param name="viewId" value="#{currentView.viewId}"/>
  </jsp:include>
</c:forEach>
```

Da ich ja nicht die includes über JSF ausführen bzw. einbetten kann, habe ich versucht das mit Hilfe der JSTL zu machen. Klappt soweit auch gut, die Seiten werden eingebunden - aber ich kann keinen Parameter durchreichen. Mit einem umschließenden <f:subview> funktioniert das auch nicht.

Im Einsatz habe ich derzeit: MyFaces (1.2.x), Tomahawk, RichFaces.

Gibt es hier eine Lösung? Oder andere Wege, um an das gewünschte Ziel zu kommen? Ich bin jetzt wirklich ratlos.



Für jegliche Hilfe/Ratschläge bin ich dankbar.


Gruß


----------



## MrWhite (5. Nov 2009)

Schonmal Facelets ausprobiert? Da gibts ui:repeat und ist eigentlich genau fuer solche Dinge wie templating etc. gedacht.


----------



## JasonV (5. Nov 2009)

MrWhite hat gesagt.:


> Schonmal Facelets ausprobiert? Da gibts ui:repeat und ist eigentlich genau fuer solche Dinge wie templating etc. gedacht.



Ja, mit ui:repeat funktioniert es auch nicht 

Problem ist hier, dass ein nested ui:include innerhalb eines ui:repeat die Variable nicht auflösen und includieren kann. Als wiederholter Aufruf mit festem src (src="xxx.html") funktioniert es. Aber wie gesagt, ich benötige das ja dynamisch


----------



## Terminator (5. Nov 2009)

Also des ui:repeat is in dem Fall net einsetzbar!


Mach folgendes:


```
<c:forEach var="item" items="#{view.items}">
    <ui:include src="#{item.include}.xhtml">
         <ui:param name="id" value="#{item.id}" />
     </ui:include>
</c:forEach>
```


Mag zwar JSTL überhaupt net, aber in dem Fall denk ich die einzig logisch denkbare Variante.
Zumindest fällt mir jetzt nix anderes ein.


----------



## JasonV (6. Nov 2009)

Also, danke für die Idee. Habe ich nun auch getestet. Allerdings passiert wiederum nichts 

Ich habe mir an der Stelle mal den Quelltext angesehen. Dort sehe ich, dass eigentlich nicht das passiert ist, was ich mir wünsche:

```
<c:foreach items="[de.xyz.item@d5f9c7, de.xyz.item@1ae9d]" var="item">  </c:foreach>
```

Anscheinend wird das forEach nicht ausgewertet...


----------

