Кодирование и декодирование страниц JSF - PullRequest
1 голос
/ 07 января 2012

Я читаю Core JavaServer Faces 3-е издание , и у меня возник вопрос о кодировании и декодировании страниц JSF.

Когда страница будет готова к просмотру, она сначала пройдет страницу XHTML, содержащую теги JSF.Каждый тег JSF имеет собственный класс обработчика тегов, и они взаимодействуют, чтобы создать дерево компонентов этой страницы.Все остальные теги игнорируются.

Каждый компонент имеет собственный рендер, который знает, как генерировать HTML.Теперь в книге написано:

(это ах: тег inputText)

Каждый компонент имеет средство визуализации, которое создает HTML-вывод, отражающий состояние компонента.Средство визуализации объекта UIInput просит реализацию JSF найти уникальный идентификатор и текущее значение выражения user.name.

Вопрос:

Почему книгаСкажите, что реализация запрашивает текущее значение выражения user.name?Я ожидаю, что реализация вместо этого спросит компонент - в данном случае UIInput - который вместо этого имеет какую-то ссылку на этот пользовательский компонент?Потому что разве этот класс не "отражает" тег JSF в коде?

Я, вероятно, неправильно понял концепцию, и я хотел бы изучить ее.

Ответы [ 3 ]

3 голосов
/ 07 января 2012

Чтобы получить выходное значение EditableValueHolder, как UIInput, Renderer обычно вызывает getValue(). Это обычно возвращает:

  1. Значение от getSubmittedValue(), если проверка ввода или преобразование не удалось
  2. Объект устанавливается явно путем вызова setValue(Object), если есть
  3. Результат value ValueExpression, если есть

Компонент определяет поведение. В идеале он должен быть слабо связан с визуализаторами, разметкой и источниками данных. Компоненту все равно, каков его источник данных - он не должен быть управляемым компонентом. Получение и установка значений является обязанностью ValueExpression.

То, что оценивает ValueExpression, зависит от контекста .

0 голосов
/ 07 января 2012

Я ожидаю, что реализация вместо этого спросила компонент?

На мой взгляд, UIInput компоненты и свойства бина - это две отличительные вещи. Они не имеют никаких отношений друг с другом, пока мы не свяжем атрибут value компонента UIInput со свойством компонента.

Другими словами, UIInput компоненты сами по себе не имеют так называемых текущих значений . Это просто средство отображения и получения значений . Таким образом, средство визуализации должно будет запросить реализацию JSF (обычно это ManagedBean) для значения, которое должны отображать компоненты UIInput.

... UIInput - вместо этого использовался пользовательский бин

В общем случае связь между UIInput, свойством и реализацией JSF (ManagedBean) должна выглядеть следующим образом: UIInput - ManagedBean - свойства компонента. Рендереру необходимо общаться с человеком посередине (ManagedBean), чтобы получить то, что он хочет, потому что UIInput не имеет прямой связи со свойствами бина.

Выше мое понимание. Пожалуйста, поправьте меня, если я ошибаюсь! :)

0 голосов
/ 07 января 2012

Параметры, передаваемые в компоненты JSF, в основном являются выражениями EL (язык выражений), и их оценка может быть lot более сложной, чем доступ к некоторой ссылке - JSF EL - это собственный язык программирования , с синтаксисом и семантикой, только косвенно связанной с Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...