20

У меня есть набор ресурсов с записями, подобные этим:Объединение строк в EL для динамического ResourceBundle ключа

entry1=value1 
entry2=value2 
entry3=value3 

В моей странице JSF Я пытаюсь использовать эти ключи динамически. Идентификатор записи поступает из управляемого компонента. Я думаю, что это должно быть примерно так:

<h:outputText value="#{msg['entry' managedBean.entryIndex]}"/> 

Как я могу это достичь?

ответ

41

Если вы уже на Servlet 3.1/EL 3.0 (Tomcat 8, WildFly 8, GlassFish 4, и т.д.), использовать новые EL 3,0 += оператор:

<h:outputText value="#{msg['entry' += managedBean.entryIndex]}" /> 

Если вы только Servlet 3.0/EL 2,2 (Tomcat 7, JBoss AS 6/7, GlassFish 3, и т.д.), использовать новую способность EL 2.2 непосредственно вызывать методы, такие как String#concat():

<h:outputText value="#{msg['entry'.concat(managedBean.entryIndex)]}" /> 

Если вы еще не на Servlet 3.0/EL 2.2, используйте <c:set> для создания другой переменной с помощью desi красное выражение EL встраиваемом:

<c:set var="key" value="entry#{managedBean.entryIndex}" /> 
<h:outputText value="#{msg[key]}" /> 
+0

Я надеялся, что для этого есть однострочный способ, но эта версия-манекен достаточно хороша. спасибо большое – gulygab

+0

Добро пожаловать. Обратите внимание, что это ограничение EL, а не ограничение JSF. У EL нет возможностей для конкатенации строк внутри выражения. – BalusC

0

Думаю, вам нужно будет написать функцию facelets concat(str1, str2).

+0

спасибо за подсказку, это хорошо работает с функцией facelet. – gulygab

8

Это должно решить проблему:

<h:outputText value="#{msg['entry'.concat(managedBean.entryIndex)]}"/> 
2

Вот что работает для меня: CONCAT вне []

<h:outputText value="#{msg['entry'].concat(managedBean.entryIndex)}" /> 
Смежные вопросы