h:outputStylesheet внутри пользовательского интерфейса:повторить

Я пытаюсь использовать для вывода ссылки на таблицу стилей для каждого элемента ArrayList. Этот код не дает результата:

<ui:repeat value="#{includer.css}" var="ss">
  <h:outputStylesheet name="#{ss}" library="css" />
</ui:repeat> 

Однако, если я изменю строки в ArrayList на полные пути и заменю h:outputStylesheet простым html, например:

<ui:repeat value="#{includer.css}" var="ss">
  <link type="text/css" rel="stylesheet" href="${ss}" />
</ui:repeat> 

тогда он работает так, как ожидалось. Проблема в том, что у меня есть некоторые выражения EL в некоторых файлах css, и кажется, что они не оцениваются, я полагаю, потому что я ссылаюсь на них напрямую.

Спасибо за любое понимание.


person lmerry213    schedule 08.06.2015    source источник
comment
Выражения EL в таблицах стилей не будут оцениваться независимо от того, как вы генерируете HTML. Таблицы стилей загружаются непосредственно браузером, без прохождения через что-либо, что будет оценивать EL.   -  person user207421    schedule 09.06.2015
comment
@EJP: на самом деле они будут, но только при загрузке через <h:outputStylesheet> (и вы перезапустили веб-приложение после добавления выражения EL в уже загруженную таблицу стилей; это именно запоминается во всем приложении для каждой таблицы стилей).   -  person BalusC    schedule 09.06.2015
comment
@BalusC Как так? Когда он генерирует элемент ссылки HTML?   -  person user207421    schedule 09.06.2015
comment
@EJP: в первую очередь для поддержки #{resource} в селекторах URL, например. фоновые изображения и шрифты. См. также stackoverflow.com/questions/6925733/   -  person BalusC    schedule 09.06.2015


Ответы (1)


<h:outputStylesheet><h:outputScript>) должны присутствовать во время построения представления, чтобы позволить управлению ресурсами JSF правильно подобрать их. Однако <ui:repeat> запускается только во время рендеринга просмотра, для JSF было бы слишком поздно выполнять действия по перемещению (перемещение в нижнюю часть головы или тела и т. д.).

Замените его на <c:forEach>.

<c:forEach items="#{includer.css}" var="ss">
    <h:outputStylesheet name="#{ss}" library="css" />
</c:forEach> 

Смотрите также:


Не связанный с конкретной проблемой, имя библиотеки css неверно. Внимательно прочитайте Что такое JSF библиотека ресурсов для и как ее следует использовать?

person BalusC    schedule 09.06.2015
comment
Спасибо, сэр. Очень интересно читать о библиотеке ресурсов. - person lmerry213; 09.06.2015