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

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

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

Ответы

Ответ 1

В текущей версии EL 2.2 вы не можете вставлять EL-выражения или String-concatenate 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} mapping:

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

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

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