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
"Seam in Action" также чередует теги JSF/Facelets и HTML.
Я запутался в том, что на самом деле использовать. Я начал смешивать теги, но начинаю верить, что это был, вероятно, неправильный выбор. Однако я не понимаю, почему пуристический подход предпочтительнее.
Я точно знаю, что у меня есть таблица, в которой данные в формате JSF не дают мне достаточной гибкости, чтобы отобразить то, что мне нужно, поэтому сделать это пуристически невозможно.
Кроме того, мне интересно, почему ни один из приведенных выше примеров не использует f: view и т. Д. Вместо жестко закодированных тегов html, head, body и т. Д.
Может кто-нибудь прояснить это для меня?
2 ответа
В эпоху 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.
Смотрите также:
Как правило, я использую сочетание тегов HTML и Facelets на страницах макета / шаблона. Но для реальных страниц содержимого я стараюсь использовать только те теги JSF, которые доступны в моей библиотеке JSF (JSF + RichFaces).
Таким образом, я могу лучше контролировать, какие элементы отображать и скрывать, а также содержимое каждого элемента, но я все еще могу жестко закодировать мой макет главной страницы в файле шаблона Facelets.