Создание представления jsf / дерева компонентов из файла xhtml
Мне нужно получить доступ к дереву компонентов jsf при запуске приложения. Я нашел этот источник в сети
UIViewRoot viewRoot = context.getApplication().getViewHandler().createView(context, "/path/to/some.xhtml");
но получившийся viewRoot не имеет дочерних элементов. Кто-нибудь знает, как лучше всего это сделать?
Благодарю.
1 ответ
Вы забыли построить представление. Ты можешь использовать ViewDeclarationLanguage#buildView()
за это. Вот выдержка из его Javadoc (выделение мое):
Выполните любые действия, специфичные для этой реализации VDL, чтобы вызвать аргумент
UIViewRoot
который должен был быть создан с помощью вызоваcreateView(javax.faces.context.FacesContext, java.lang.String)
, чтобы заселяться детьми.
Таким образом, это должно сделать:
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.