Как визуализировать изображения в JSF 2.0

В соответствии со спецификацией JSF 2.0 существует три способа использования h: graphicImage в зависимости от способа, с помощью которого JSF генерирует атрибут "src" тега HTML:

<h:graphicImage value="#{resource['images:next.gif']}"/>

<h:graphicImage library="images" name="next.gif"/>

<h:graphicImage url="/resources/images/next.gif"/>

В спецификации указано, что первые два должны отображать точно такую ​​же разметку. В моей реализации JSF (MyFaces 2.0.2) здесь выведен HTML-код вывода:

<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">

<img src="/AppName/faces/javax.faces.resource/next.gif?ln=images">

<img src="/AppName/resources/images/next.gif">

Итак, кажется, что если я использую (имя, библиотеку) или (значение) атрибуты, изображение всегда будет передаваться клиенту с помощью сервлета JSF. Если я использую (url) атрибут, я могу дать прямую ссылку на ресурс без вмешательства сервлета.

Для меня второй подход - прямой URL-адрес сервера к ресурсу, быстрее.

В каких случаях следует использовать первый подход - указание (имя, библиотека) или (значение) атрибутов?

Ответ 1

Для меня второй подход - прямой URL-адрес сервера к ресурсу, быстрее.

Разница должна быть совершенно незначительной. Подход "прямого сервера к ресурсу" также использует сервлет (сервлет default, который предоставляется контейнером). Пожалуйста, покажите результаты тестов.


В каких случаях следует использовать первый подход - указание (имя, библиотека) или (значение) атрибутов?

Он позволяет вам обслуживать ресурсы из JAR файла. Он также позволяет вам более удобно динамически переключать библиотеку следующим образом:

<h:graphicImage library="#{user.prefs.looknfeel}" name="next.gif"/>

library должен фактически указывать на общую библиотеку ресурсов со всеми CSS/JS/изображениями, а не на определенную библиотеку изображений.

Похожие вопросы: