Жизненный цикл JSF и Пользовательские компоненты

Создайте статический член в своем классе Activity. Затем назначьте значение во время onPostExecute

Например, если результат вашей AsyncTask является строкой, создайте в своей активности статическую строку public

public static String dataFromAsyncTask;

Затем в onPostExecute AsyncTask просто сделайте статический вызов вашему основному классу и установите значение.

MainActivity.dataFromAsyncTask = "result blah";

17
задан Karl Richter 15 May 2018 в 14:07
поделиться

4 ответа

Существует довольно хорошая схема в спецификация JSF, которая показывает жизненный цикл запроса - важный для понимания этого материала.

шаги:

  • Представление Восстановления . Дерево UIComponent восстановлено.
  • Применяют Значения Запроса . Доступные для редактирования компоненты должны реализовать EditableValueHolder. Эта фаза обходит дерево компонента и звонит эти методы processDecodes . Если компонент не будет чем-то сложным как UIData, это не сделает многого кроме вызова, который его собственные декодируют метод. Эти декодируют , метод не делает многого кроме находки его рендерер и вызывает его , декодируют метод, передавая себя как аргумент. Это - задание рендерера, чтобы получить любое отправленное значение и установить его через setSubmittedValue.
  • Проверки Процесса . Эта фаза вызовы processValidators, который будет звонить , проверяет . Эти проверяют , метод принимает отправленное значение, преобразовывает его с любыми преобразователями, проверяет его с любыми блоками проверки допустимости и (предположение, что данные проходят те тесты), вызовы setValue. Это сохранит значение как локальную переменную. В то время как эта локальная переменная не является пустой, она будет возвращена и не значение от привязки значения для любых вызовов к [1 110] getValue.
  • Значения Модели Обновления . Эта фаза вызовы processUpdates. Во входном компоненте это будет звонить updateModel, который получит ValueExpression и вызовет его для устанавливания значения на модели.
  • Вызывают Приложение . Слушатели события кнопки и так далее будут вызваны здесь (как будет навигация, если не изменяет память).
  • Ответ Рендеринга . Дерево представляется через рендереры и сохраненное состояние.
  • , Если любая из этих фаз сбой (например, значение недопустимо), пропуски жизненного цикла для Рендеринга Ответа.
  • события Various могут быть запущены после большинства этих фаз, вызвав слушателей как соответствующих (как значение изменяют слушателей после Проверок Процесса).

Это - несколько упрощенная версия событий. Обратитесь к спецификации для получения дополнительной информации.

я подверг бы сомнению, почему Вы пишете свой собственный UIComponent. Это - нетривиальная задача, и глубокое понимание архитектуры JSF требуется, чтобы разбираться в ней. При необходимости в пользовательском элементе управления лучше создать конкретное управление, которое расширяется, exisiting UIComponent (как HtmlInputText делает) с эквивалентным рендерером.

, Если загрязнение не является проблемой, существует реализация JSF с открытым исходным кодом в форме Apache MyFaces.

19
ответ дан 30 November 2019 в 13:13
поделиться

Слушателей действия, такой что касается Кнопка , звонят во время эти , Вызывают фазу Application , которая является последней фазой перед финалом Ответ Рендеринга фаза. Это показывают в Жизненный цикл JSF - рисунок 1 .

3
ответ дан 30 November 2019 в 13:13
поделиться

Это - единственная платформа, которую я когда-либо использовал, где создание компонента является глубоким сложным процессом как это. Ни одна из других веб-платформ (ли в .net мире или не) не делает это настолько болезненным, который абсолютно необъясним мне.

Некоторые проектные решения позади JSF начинают иметь немного больше смысла, когда Вы рассматриваете цели. JSF был разработан, чтобы быть оснащенным - он представляет много метаданных для IDE. JSF не является веб-платформой - это платформа MVP , которая может использоваться в качестве веб-платформы. JSF очень расширяем и настраивается - можно заменить 90% реализации на основе на приложение.

большая часть этого материала просто делает Ваше задание более сложным, если все, что Вы хотите сделать, закрадываются в дополнительное управление HTML.

компонент является составом нескольких inputtext (и другой) основные компоненты, btw.

я предполагаю, что фрагменты страницы JSP-includes/tooling-based не отвечают Вашим требованиям.

я рассмотрел бы использование Вашего UIComponentELTag.createComponent для создания составного элемента управления с основой UIPanel и создающий всех ее детей из существующих реализаций. (Я предполагаю, что Вы используете JSPs/taglibs и высказываете несколько других предположений.) Вы, вероятно, хотели бы пользовательский рендерер, если бы ни один из существующих рендереров UIPanel не сделал задание, но рендереры легки.

2
ответ дан 30 November 2019 в 13:13
поделиться

Лучшая статья, которую я нашел, Компонент Jsf, Пишущий , что касается 2, где я читаю значение для привязки значения в Вашем компоненте, у Вас есть метод get, который похож на это


public String getBar() {  
     if (null != this.bar) {  
         return this.bar ;  
     }  
     ValueBinding _vb = getValueBinding("bar");  
     return (_vb != null) ? (bar) _vb.getValue(getFacesContext()) : null;  
}
  

, как это входило в getValueBinding? В Вашем классе тега setProperties метод

  if (bar!= null) {  
         if (isValueReference(bar)) {  
             ValueBinding vb = Util.getValueBinding(bar);  
             foo.setValueBinding("bar", vb);  
         } else {  
             throw new IllegalStateException("The value for 'bar' must be a ValueBinding.");  
         }  
     }  
1
ответ дан 30 November 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: