JSF <h:outputStylesheet>
, <h:outputScript>
и <h:graphicImage>
имеют атрибут library
. Что это и как это следует использовать? В Интернете есть много примеров, которые используют его как общий тип содержимого/файла css
, js
и img
(или image
) в качестве имени библиотеки в зависимости от используемого тега:
<h:outputStylesheet library="css" name="style.css" />
<h:outputScript library="js" name="script.js" />
<h:graphicImage library="img" name="logo.png" />
Как это полезно? Значение library
в этих примерах, похоже, просто повторяет то, что уже было представлено именем тега. Для <h:outputStylesheet>
он основан на имени тега, уже очевидном, что он представляет собой "библиотеку CSS". Какая разница со следующим, который также работает так же?
<h:outputStylesheet name="css/style.css" />
<h:outputScript name="js/script.js" />
<h:graphicImage name="img/logo.png" />
Кроме того, сгенерированный вывод HTML немного отличается. Учитывая путь контекста отображения /contextname
и FacesServlet
в шаблоне URL-адреса *.xhtml
, первый генерирует следующий HTML-код с именем библиотеки в качестве параметра запроса:
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/style.css.xhtml?ln=css" />
<script type="text/javascript" src="/contextname/javax.faces.resource/script.js.xhtml?ln=js"></script>
<img src="/contextname/javax.faces.resource/logo.png.xhtml?ln=img" alt="" />
Пока последний генерирует следующий HTML-код с именем библиотеки только по пути URI:
<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml" alt="" />
Последний подход делает задним числом также более ощутимым, чем прежний подход. Как же полезен атрибут library
?