7
我需要在应用程序启动时访问jsf页面组件树。我在网上发现这个源从xhtml文件创建jsf视图/组件树
UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml");
但是生成的viewRoot没有任何子节点。 有没有人知道最好的办法是什么?
谢谢。
我需要在应用程序启动时访问jsf页面组件树。我在网上发现这个源从xhtml文件创建jsf视图/组件树
UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml");
但是生成的viewRoot没有任何子节点。 有没有人知道最好的办法是什么?
谢谢。
您忘了构建的看法。你可以使用ViewDeclarationLanguage#buildView()
。下面是它的javadoc(重点煤矿)的摘录:
采取具体到这个VDL实施任何行动,导致必须已经通过调用创建
createView(javax.faces.context.FacesContext, java.lang.String)
,与孩子填充的说法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.
可以顺便也用ViewDeclarationLanguage#createView()
直接创建视图,而不是ViewHandler#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.