вложение el-выражений в JSF для API ресурсов

<p:graphicImage value="#{resource['images:primefaces-ui/#{car.manufacturer}.jpg']}"/>

Я хотел бы сначала вычислить внутренний el, а затем вычислить путь с помощью API ресурсов. Я пробовал использовать тег <c:set>, но его переменная также является EL, поэтому это не имеет значения.


person Ravi Kadaboina    schedule 02.11.2011    source источник


Ответы (1)


В текущей версии EL 2.2 вы не можете вложить выражения EL или объединить переменные EL таким образом. Используйте <c:set> для подготовки динамический ключ, прежде чем использовать его в другом выражении EL, просто вставив выражение EL в строку:

<c:set var="resourceName" value="images:primefaces-ui/#{car.manufacturer}.jpg" />
<p:graphicImage value="#{resource[resourceName]}"/>

Альтернативой является простое использование атрибутов library и name вместо создания URL-адреса на основе этих атрибутов с помощью сопоставления #{resource}:

<p:graphicImage library="images" name="primefaces-ui/#{car.manufacturer}.jpg" />

Обновление: начиная с версии EL 3.0, вы можете использовать оператор += для объединения строк в переменные EL, если по какой-то причине вы действительно не можете использовать library/name.

<p:graphicImage value="#{resource['images:primefaces-ui/' += car.manufacturer += '.jpg']}"/>
person BalusC    schedule 02.11.2011
comment
Это зависит от деталей реализации ui: param - он не обещает установить переменную в текущем контексте шаблона. Я буду ссылаться на собственный ответ BalusC: stackoverflow.com/a/20376916/1341535 - person Vsevolod Golovanov; 08.08.2014