Выйти из фигурных скобок в jsf [duplicate]

Интересно, что ни один из ответов на этой странице не упоминает два крайних случая, надеюсь, никто не возражает, если я их добавлю:

Случай с краем # 1: одновременный доступ к Словарю

Родовые словари в .NET не являются потокобезопасными, а иногда могут бросать NullReference или даже (чаще) a KeyNotFoundException при попытке получить доступ к ключу из двух параллельных потоков. Исключение в этом случае является довольно ошибочным.

Случай с краем # 2: небезопасный код

Если код NullReferenceException задан кодом unsafe, вы можете посмотреть на переменные указателя , и проверьте их на IntPtr.Zero или что-то в этом роде. Это одно и то же («исключение нулевого указателя»), но в небезопасном коде переменные часто переводятся в типы значений / массивы и т. Д., И вы ударяете головой о стену, задаваясь вопросом, как тип значения может исключение.

(Еще одна причина для небезопасного использования небезопасного кода, если вам это нужно)

14
задан BalusC 2 November 2011 в 05:58
поделиться

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" />

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

<p:graphicImage value="#{resource['images:primefaces-ui/' += car.manufacturer += '.jpg']}"/>
23
ответ дан BalusC 1 September 2018 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: