Ответ 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 или разработки общего пользовательского интерфейса. Тем не менее, я думаю, что лучше избегать этого компонента после начала "реальной" разработки...