Почему Facelets предпочтительнее JSP в качестве языка определения вида из JSF2.0 и далее?

Я вижу, что с JSF2.0 и выше Язык определения Facelets - это предпочтительный язык определения вида, а не JSP, который устарел, поскольку он устарел. Я хочу понять, почему Facelets предпочтительнее JSP в качестве языка определения вида из JSF2.0 и далее? Я знаю, что JSP также имеет некоторое поведение шаблонов, которое является основным моментом для принятия Facelets.

P.S: Я прошел через этот пост в stackoverflow, но я не думаю, что он отвечает на мой вопрос. Следовательно, отправляйте это как отдельный вопрос.

Ответ 1

Правда, JSP имеет некоторые возможности templating, но самым большим недостатком использования JSP в JSF является то, что JSP пишет ответ, как только он сталкивается с текстом шаблона, в то время как JSF хотел бы сделать с ним предварительную обработку. В JSF 1.0/1.1 следующий код JSF

<h:outputText value="first"> second <h:outputText value="third"> fourth

создаст

вторая четвертая первая треть

Это было во время JSF 1.0/1.1 в возрасте головной боли. Разработчикам необходимо было бы обернуть текст шаблона, как second и fourth в приведенном выше примере в тегах <f:verbatim> по всему месту. JSF 1.2 решил его с улучшенным обработчиком вида, который анализирует JSP вместо его выполнения, но он находился под капотами, все еще очень неуклюжими, поскольку синтаксис JSP не является "хорошо сформированным", как XML. Было настоятельно предложено использовать технологию просмотра на основе XML, чтобы можно было использовать эффективный анализатор на основе SAX. И Facelets родился (среди Ken Paulsen "JSFTemplating" ).

Кроме того, унифицированный EL #{} не может использоваться в тексте шаблона JSP, что приводит к уродливому — и для начальных неинтуитивных — смешивание ${} и #{}. Кроме того, JSTL может в JSF 1.x на JSP не использоваться как просматривать метки времени создания. Кроме того, синтаксис JSP с <% %> - это старая школа, и возможность встраивания исходного кода Java в JSP считается очень плохой практикой, которая разбивает MVC идеология.

Все со всеми, в перспективе JSF/MVC, JSP просто уродливый и ужасный, а Facelets просто чист и потрясающий.

Ответ 2

Я нашел следующие ответы в Интернете.

Документация JSFToolbox главы 3:

Накладные расходы на сжатие JSP

Каждый раз, когда вы редактируете, сохраняете и перезагружаете страницу JSP, компилятор JSP сервера генерирует Java-код сервлета и скомпилирует его в сервлет. Это называется процессом перевода JSP, и обычно он стоит от 1-2 секунд в зависимости от производительности сервера.

Компиляция XML файлов Facelets

В отличие от страниц JavaServer страницы Facelets не скомпилированы в сервлеты. Поскольку страницы Facelets соответствуют требованиям XML, платформа Facelets использует быстрый компилятор на основе SAX для создания ваших представлений. Кроме того, Facelets можно настроить для мгновенного обнаружения и рендеринга изменений на ваших страницах, ускоряя цикл разработки JSF.

Запишите "Компоненты JSF 1.2" от Яна Хлаваца, страница 49:

При разработке приложений JSF мы часто вносим изменения в наши страницы JSF, что приводит к частой перекомпиляции наших страниц JSP, и это время компиляции накладные расходы могут складываться.

Страницы Facelets - это простые XML-документы (страницы XHTMl), которые никогда не компилируются для сервлетов, скорее, он использует процесс компиляции на основе SAX, который создает пользовательский интерфейс дерево компонентов для наших представлений. Следовательно, Facelets быстрее по сравнению с JSP, так как это без накладных расходов на перевод JSP.