2012-08-29 11 views
7

アプリケーションの起動時にjsfページのコンポーネントツリーにアクセスする必要があります。このソースがネット上に見つかりました。xhtmlファイルからjsfビュー/コンポーネントツリーを作成

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

ただし、結果のviewRootには子がありません。 誰かがそれを行う最善の方法を知っていますか?

ありがとうございました。

答えて

4

ビルドビューを忘れました。これにはViewDeclarationLanguage#buildView()を使用できます。ここではそのjavadoc(強調鉱山)の抽出物があります:

子供移入するcreateView(javax.faces.context.FacesContext, java.lang.String)への呼び出しを介して作成されている必要があります引数UIViewRootを引き起こすために、このVDLの実装に固有の任意のアクションを取ります。

したがって、これは実行する必要があります。

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. 

あなたが道でも代わりViewHandler#createView()速記のビューを作成するために、直接ViewDeclarationLanguage#createView()を使用することができます。

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. 
関連する問題