#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 .