Подтвердить что ты не робот

Конкатенация строк в EL для динамического ключа ResourceBundle

У меня есть набор ресурсов с такими элементами:

entry1=value1
entry2=value2
entry3=value3

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

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

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

4b9b3361

Ответ 1

Если вы уже используете 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 inlined:

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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