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

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

PS: я прошел через этот пост на stackru, но я не думаю, что он отвечает на мой вопрос. Отсюда пост это отдельный вопрос.

2 ответа

Решение

Да, JSP имеет некоторые шаблонные возможности, но самый большой недостаток использования 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 родился (среди "JSFT примеров" Кена Полсена).

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

В целом, с точки зрения JSF/MVC, JSP просто безобразен и ужасен, а Facelets просто чист и обалден.

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

Глава 3 документации JSFToolbox:

Затраты времени компиляции JSP

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

Компиляция Facelets XML

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

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

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

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

Другие вопросы по тегам