Конкатенация строк в EL для динамического ключа ResourceBundle - PullRequest
20 голосов
/ 31 января 2011

У меня есть пакет ресурсов с такими записями:

entry1=value1
entry2=value2
entry3=value3

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

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

Как мне этого добиться?

Ответы [ 4 ]

43 голосов
/ 31 января 2011

Если вы уже используете 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>, чтобы создать другую переменную с нужным выражением EL:

<c:set var="key" value="entry#{managedBean.entryIndex}" />
<h:outputText value="#{msg[key]}" />
8 голосов
/ 16 августа 2011

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

<h:outputText value="#{msg['entry'.concat(managedBean.entryIndex)]}"/>
2 голосов
/ 15 сентября 2017

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

<h:outputText value="#{msg['entry'].concat(managedBean.entryIndex)}" />
0 голосов
/ 31 января 2011

Я думаю, вам придется написать функцию Facelets concat(str1, str2).

...