Преимущество над

#jsf-2 #tags #image

#jsf-2 #Теги #изображение

Вопрос:

Каковы преимущества использования <h:graphiImage> по сравнению с обычным <img> (с точки зрения производительности, например, времени синтаксического анализа / рендеринга, возможного http-кэширования, если таковое имеется? и т.д.) Для JSF2?

Ответ №1:

Вы не получаете атрибуты на стороне сервера <img> для элементов.

Комментарии:

1. Вы имеете в виду что-то вроде rendered ? это может быть достигнуто с помощью ui:fragment . Нет ли чего-нибудь более особенного? Например, дает ли вам какое-либо преимущество, когда все ваши изображения передаются одним сервлетом.

2. Да, rendered это один из таких атрибутов. Я не уверен, что вы ищете с точки зрения «специального» — здесь нет волшебства.

Ответ №2:

Не существует безопасного и простого способа задать абсолютный путь для src атрибута. Это важно, потому что вы вполне можете ссылаться на одно и то же изображение с нескольких страниц, которые находятся в разных каталогах. Хотите ли вы хлопот по поддержанию их относительного местоположения? Конечно, вы можете использовать <img src="#{resource['images:myImage.png']}"/> для получения безопасного абсолютного пути. Разве это не было бы проще в использовании <h:graphicImage name="myImage.png" library="images"/> ?

Что это за «безопасный» абсолютный путь?

Вы могли бы оставить свои изображения за пределами обычной папки ресурсов и указать их в абсолютном пути, например, так: <img src="/myApp-web/faces/images/myImage.png"/> и это сработало бы. Но что тогда происходит, когда вы хотите развернуть свое приложение? Вы хотите, чтобы ваши URL-адреса были похожи http://www.mysite.com/faces/myPage.xhtml ? Конечно, нет. Вы хотите установить корень контекста в корень сервера. Но вам не нужны хлопоты по изменению всех ваших img тегов для производственного развертывания, и вам не нужен какой-то взлом, который включает в себя получение базового URL-адреса из компонента в области приложения и надежду, что вы не забудете изменить свойство для производственного развертывания. Так что вам лучше, по крайней мере, использовать <img src="#{resource['images:myImage.png']}"/> или гораздо легче запомнить <h:graphicImage name="myImage.png" library="images"/> .

Комментарии:

1. Вы всегда можете поместить корень контекста перед src изображения: <img src="#{request.contextPath}/img/image.png"/> что одновременно безопасно и просто.

2. Ах да, не подумал об этом, что странно, потому что я однажды сделал это сам. Тем не менее, я думаю, что использовать компонент изображения без EL проще, чем тег img с EL .