20

que tiene un paquete de recursos con las entradas como las siguientes:concatenación de cadenas en EL para ResourceBundle dinámica clave

entry1=value1 
entry2=value2 
entry3=value3 

En mi página JSF Estoy tratando de utilizar estas claves de forma dinámica. La identificación de la entrada proviene de un bean administrado. Creo que debería ser algo como esto:

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

¿Cómo puedo lograr esto?

Respuesta

41

Si ya estás en Servlet 3.1/3.0 EL (8 Tomcat, JBoss 8, GlassFish 4, etc), hacer uso de la nueva EL 3.0 += operador:

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

Si estás sólo en servlet 3.0/EL 2,2 (7 Tomcat, JBoss AS 6/7, GlassFish 3, etc), hacer uso de la nueva habilidad EL 2,2 a invocar directamente los métodos tales como String#concat():

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

si está incluso no en Servlet 3.0/EL 2.2 aún, haga uso de <c:set> para crear otra variable con el desi la expresión de color rojo EL inlined:

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

espero que haya una forma de una línea para esto, pero esta versión de facelet es lo suficientemente buena. Muchas gracias – gulygab

+0

De nada. Tenga en cuenta que esto es una restricción EL, no una restricción JSF. EL no tiene instalaciones para la concatenación de cadenas dentro de una expresión. – BalusC

0

Creo que deberás escribir una función de facelets concat(str1, str2).

+0

muchas gracias por la pista, se funciona bien con una función facelet. – gulygab

8

Esto debería resolver su problema:

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

Esto es lo que funcionó para mí: concat fuera de []

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