Создание представления 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.
Другие вопросы по тегам