2012-08-29 4 views
7

Ich muss auf JSF-Seiten Komponentenbaum beim Start der Anwendung zugreifen. Ich habe diese Quelle im Netz gefundenErstellen von JSF-Ansicht/Komponentenbaum aus der XHTML-Datei

UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml"); 

aber die resultierende ViewRoot hat keine Kinder. Weiß jemand, was der beste Weg ist, es zu tun?

danke.

Antwort

4

Sie haben vergessen, bauen die Ansicht. Sie können dazu ViewDeclarationLanguage#buildView() verwenden. Hier ist ein Auszug aus seiner javadoc (Hervorhebung von mir):

Nehmen Sie alle Aktionen, die für diese VDL Implementierung des Argument UIViewRoot zu verursachen, die über einen Aufruf createView(javax.faces.context.FacesContext, java.lang.String) erstellt worden sein, zu mit Kindern bevölkert werden.

So sollte dies tun:

String viewId = "/path/to/some.xhtml"; 
FacesContext context = FacesContext.getCurrentInstance(); 
ViewHandler viewHandler = context.getApplication().getViewHandler(); 

UIViewRoot view = viewHandler.createView(context, viewId); 
viewHandler.getViewDeclarationLanguage(context, viewId).buildView(context, view); 
// view should now have children. 

Sie durch die Art und Weise können auch die ViewDeclarationLanguage#createView() verwenden, um direkt die Ansicht anstelle der ViewHandler#createView() Stenographie zu erstellen.

String viewId = "/path/to/some.xhtml"; 
FacesContext context = FacesContext.getCurrentInstance(); 
ViewDeclarationLanguage vdl = context.getApplication().getViewHandler().getViewDeclarationLanguage(context, viewId); 

UIViewRoot view = vdl.createView(context, viewId); 
vdl.buildView(context, view); 
// view should now have children. 
Verwandte Themen