Java 从xhtml文件创建jsf视图/组件树

Java 从xhtml文件创建jsf视图/组件树,java,jsf-2,Java,Jsf 2,我需要在应用程序启动时访问jsf页面组件树。我在网上找到了这个消息来源 UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml"); 但是生成的viewRoot没有任何子级。 有人知道最好的方法是什么吗 谢谢。您忘了构建视图。你可以用这个。以下是它(我的重点)的摘录: 采取任何特定于此VDL实现的操作,以使必须通过调用创建的参数UIVi

我需要在应用程序启动时访问jsf页面组件树。我在网上找到了这个消息来源

   UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml");
但是生成的viewRoot没有任何子级。 有人知道最好的方法是什么吗


谢谢。

您忘了构建视图。你可以用这个。以下是它(我的重点)的摘录:

采取任何特定于此VDL实现的操作,以使必须通过调用创建的参数
UIViewRoot
填充子参数

因此,这应该做到:

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.
顺便说一下,您也可以直接使用来创建视图,而不是使用速记

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.