JSF/Facelets: почему не стоит смешивать JSF/Facelets с тегами HTML?

Я читал это несколько раз сейчас: некоторые разработчики не сторонники чередования JSF/Facelets с тегами HTML в своих файлах XHTML. Очевидно, что теги HTML не будут частью дерева компонентов пользовательского интерфейса, но каков недостаток этого?

Я часто нахожу примеры кода, в которых авторы делают такое смешение:

http://www.ibm.com/developerworks/java/library/j-facelets/

http://www.packtpub.com/article/facelets-components-in-jsf-1.2

http://oreilly.com/catalog/9780596529246

"Шов в действии" также перемежает JSF/Facelets и HTML-теги.

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

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

Кроме того, мне интересно, почему ни один из приведенных выше примеров не использует f: view и т.д. вместо жестко обозначенных тегов html, head, body и т.д.

Кто-нибудь может прояснить это для меня?

Ответ 1

Во время JSF 1.0/1.1 это действительно "не очень хорошая идея", потому что весь HTML не был автоматически взят в дереве компонентов JSF при использовании JSP в качестве технологии просмотра. Весь простой HTML был с нетерпением JSP, представленный перед деревом компонентов JSF. Например.

<p>Lorem ipsum <h:outputText value="#{bean.value1}"> dolor sit amet<p>
<p>Consectetur adipiscing <h:inputText value="#{bean.value2}" /> elit</p>

получился как

<p>Lorem ipsum dolor sit amet<p>
<p>Consectetur adipiscing elit</p>

value1
<input type="text" value="value2" />

Чтобы исправить это, вам нужно принести <f:verbatim>.

<f:verbatim><p>Lorem ipsum </f:verbatim><h:outputText value="#{bean.value1}"><f:verbatim> dolor sit amet<p></f:verbatim>
<f:verbatim><p>Consectetur adipiscing </f:verbatim><h:inputText value="#{bean.value2}" /><f:verbatim> elit</p></f:verbatim>

Это была настоящая боль в обслуживании. Это была одна из основных причин, почему JSF 1.0/1.1 так ненавидел.

Поскольку JSF 1.2, с новым обработчиком вида, <f:verbatim> больше не нужен. Теперь разработчики могут избавиться от облегчения. Более того, новый обработчик вида позволил JSF использовать другую технологию просмотра, чем JSP, и таким образом родился Facelets.

См. также:

Ответ 2

Как правило, я использую теги HTML и Facelets в формате HTML и макеты на страницах макета/шаблона. Но для реальных страниц контента я стараюсь использовать теги JSF, доступные только с выбранной мной библиотекой JSF (JSF + RichFaces).

Таким образом, я могу больше контролировать, какие элементы отображаться и скрываться, а также содержимое внутри каждого элемента, но я все же могу жестко закодировать свой макет главной страницы в файле шаблона facelets.