Изображение без необходимости отображается в событии ‹p:graphicImage›, хотя имя изображения из каталога ресурсов не указано

Я сохранил несколько изображений в каталоге webroot\resources\fileUpload\product_image\thumb, чтобы эти изображения можно было отобразить в каталоге <p:graphicImage> следующим образом.

<p:graphicImage library="fileUpload" 
                name="product_image/thumb/13850470212653732655006325945389_4921.jpg" 
                alt="Whatever the product name is."/>

Если имя изображения, например 13850470212653732655006325945389_4921.jpg, не указано, изображение не должно отображаться, но оно отображает изображение с заданного URL-адреса.

<p:graphicImage library="fileUpload" 
                name="product_image/thumb/" 
                alt="Whatever the product name is."/>

URL-адрес изображения в веб-браузере выглядит следующим образом.

/webroot/javax.faces.resource/product_image/thumb/.jsf?ln=fileUpload&v=13850470212653732655006325945389_4921

Как он улавливает изображение?


person Tiny    schedule 21.11.2013    source источник


Ответы (1)


Если имя файла ресурса соответствует \d+(_\d+), то он распознается как версионный ресурс. Это редко используемая функция (более распространена версия библиотеки ресурсов). Конкретно у вас может быть такая структура:

WebContent
 |-- resources
 |    `-- js
 |         `-- script.js
 |              |-- 1_0.js
 |              |-- 1_1.js
 |              `-- 1_2.js
 :

(да, script.js — это название папки)

И когда вы объявляете это следующим образом:

<h:outputScript name="js/script.js" />

затем автоматически последний, 1_2.js, будет обслуживаться в соответствии со следующим сгенерированным выводом HTML, при условии, что контекстный путь /context и сопоставление JSF *.xhtml:

<script type="text/javascript" src="/context/javax.faces.resource/scripts/script.js.xhtml?v=1_2"></script>

Все это указано в главе 2.6.1.3 Спецификация JSF.

Однако у вас есть немного неудачный угловой случай использования папки без расширения с косой чертой в конце в качестве имени ресурса, что должно было потерпеть неудачу IMO, но, по-видимому, это также принято Mojarra.

Если вы хотите избежать такого поведения, вам нужно использовать другой шаблон в качестве имени файла. Например. используйте - вместо _, или используйте _ в качестве префикса или суффикса, или введите хотя бы один буквенный символ.

person BalusC    schedule 22.11.2013
comment
Изменение имени файла не позволяло отображать изображение, когда имя файла пусто. Не по теме: атрибут alt для <p:graphicImage> не отображает альтернативный текст, когда изображение недоступно. Есть ли что-нибудь, чтобы посмотреть на это, чтобы отобразить альтернативный текст? Спасибо. - person Tiny; 22.11.2013
comment
Пожалуйста. alt отображается только тогда, когда src пусто. Другими словами, когда <p:graphicImage name> равно null или пусто. Если указан недопустимый ресурс, он генерирует ошибку src="RES_NOT_FOUND". Я бы добавил условие, чтобы опустить product_image/thumb/, если имя пустое или пустое. - person BalusC; 22.11.2013