EL中用于动态ResourceBundle键的字符串连接

gul*_*gab 20 jsf resourcebundle el string-concatenation internationalization

我有一个资源包,其中包含以下条目:

entry1=value1
entry2=value2
entry3=value3
Run Code Online (Sandbox Code Playgroud)

在我的JSF页面中,我试图动态地使用这些键.条目的ID来自托管bean.我认为它应该是这样的:

<h:outputText value="#{msg['entry' managedBean.entryIndex]}"/>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Bal*_*usC 44

如果您已经使用Servlet 3.1/EL 3.0(Tomcat 8,WildFly 8,GlassFish 4等),请使用新的EL 3.0 +=运算符:

<h:outputText value="#{msg['entry' += managedBean.entryIndex]}" />
Run Code Online (Sandbox Code Playgroud)

如果您只使用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)]}" />
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用Servlet 3.0/EL 2.2,请使用<c:set>内联所需EL表达式创建另一个变量:

<c:set var="key" value="entry#{managedBean.entryIndex}" />
<h:outputText value="#{msg[key]}" />
Run Code Online (Sandbox Code Playgroud)


小智 8

这应该可以解决您的问题:

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