Подтвердить что ты не робот

Должен ли я использовать атрибут "jsfc" Facelets?

Facelets использует атрибут jsfc для преобразования HTML-элементов в связанные с ними компоненты JSF. Это довольно полезно для быстрого прототипирования, поскольку позволяет создавать ваши представления с помощью инструмента визуального дизайна. Однако недавно я обнаружил этот блог-сообщение от Cay Horstmann, где он тратит время на использование jsfc вместе со сложными компонентами, такими как как h: dataTable.

Это насторожило меня, поскольку Кей Хорстманн - автор нескольких моих любимых книг на Java. Однако мои навыки Google-fu дали нулевые результаты при попытке определить масштаб/характер проблемы, кроме недавней публикации Ed Burns, который швыет как jsfc (и он все-таки возглавляет со-spec для JSF). Поэтому мой вопрос просто, рекомендуется ли использовать jsfc с Facelets? и если нет, то какая проблема она вводит.

4b9b3361

Ответ 1

Как вы сказали, атрибут jsfc по существу полезен, когда вам нужно "преобразовать" прототип HTML на страницу JSF. Например, когда у вас есть текст ввода HTML:

<input type="text" .../>

вы можете добавить атрибут jsfc, чтобы преобразовать этот компонент HTML в компонент JSF:

<input type="text" jsfc="h:inputText" .../>

Это эквивалентно написанию следующего кода JSF:

<h:inputText .../>

Как указано в документации Facelets здесь или здесь, атрибут jsfc также может использоваться для "отображения" компонентов Facelets. Например, вы можете удалить часть HTML-кода:

<span jsfc="ui:remove">
This won't be compiled either <h:outputText value="#{foo.bar}"/>
</span>

Вы также можете создать таблицу, используя этот атрибут:

<table>
    <tr jsfc="ui:repeat" value="#{dept.employees}" var="emp" class="#{emp.manager ? 'mngr' : 'peon'}">
       <td>#{emp.lastName}</td>
       <td>#{emp.firstName}</td>
    </tr>
</table>

В этом примере мы не привязываем эту таблицу к компоненту h:datatable, но мы создаем таблицу с кодом HTML, используя компонент JSF ui:repeat для итерации по строкам.

Как вы можете видеть, атрибут jsfc может использоваться для преобразования одного компонента HTML в один компонент JSF на странице JSF. Поэтому для сложных компонентов, таких как данные, вам придется использовать некоторые обходные пути (используя ui:repeat вместо компонента h:datatable).

Другим моментом является то, что вы не сможете использовать компоненты сторонних библиотек, такие как те, которые были предложены RichFaces, IceFaces, Tomahawk и т.д. И эти библиотеки действительно являются одним из интересов JSF.

Итак, чтобы подвести итог: jsfc может быть полезно преобразовать прототип HTML в приложения JSF, в основном для создания Proof of Concepts или разработки общего пользовательского интерфейса. Тем не менее, я думаю, что лучше избегать этого компонента после начала "реальной" разработки...