2009-07-20 3 views
1

Kennen Sie eine Möglichkeit, während der Laufzeit eine andere Facelet-Komponente auszuwählen?Auflösen von Facelets-Komponenten zur Laufzeit

Ich habe einige Code ähnlich wie diese bekommen:

<s:fragment rendered="#{r== 'case1'}"> 
    <div> 
      <ui:include src="case1.xhtml" /> 
    </div> 
</s:fragment> 
<s:fragment rendered="#{r== 'case2'}"> 
    <div> 
      <ui:include src="case2.xhtml" /> 
    </div> 
</s:fragment> 

Ich mag würde

<ui:include src="#{r}.xhtml" /> 

Dank schreiben.

Antwort

1

Ihre Lösung sollte OK funktionieren - die src attribute kann ein Literal oder eine EL-Ausdruck sein. Möglicherweise möchten Sie, dass der Ausdruck eine Eigenschaft einer verwalteten Bean verwendet oder sie über eine function auflösen. Auf diese Weise können Sie sicherstellen, dass es nie null ist (Sie könnten einen Verweis auf eine leere Seite zurückgeben, wenn dies der Fall war). Sie erhalten wahrscheinlich einen Fehler 404, wenn # {r} in null aufgelöst wird.

0

Nicht sicher. Eine Alternative wäre jedoch, eine Vorlage mit einem ui zu verwenden: insert und dann zu case1 oder case2 zu verweisen, die ui: programmatically definieren.

0

Es ist möglich, selektive Verwendung von ui: include mit anderen JSF-Komponenten zu haben. Beispiel:

<h:panelGroup rendered="#{!menuMBean.passwordResetRequired}"> 
    <ui:include src="homeNormal.xhtml" /> 
</h:panelGroup>