20

Ho un pacchetto di risorse con le voci come questi:concatenazione di stringhe in EL per ResourceBundle dinamica chiave

entry1=value1 
entry2=value2 
entry3=value3 

Nella mia pagina JSF Sto cercando di utilizzare questi tasti in modo dinamico. L'ID della voce proviene da un bean gestito. Penso che dovrebbe essere qualcosa di simile:

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

Come posso ottenere questo?

risposta

41

Se sei già su Servlet 3.1/EL 3.0 (Tomcat 8, wildfly 8, GlassFish 4, ecc), fanno uso di nuovo EL 3.0 += operatore:

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

Se sei solo servlet 3.0/EL 2.2 (Tomcat 7, JBoss AS 6/7, GlassFish 3, ecc), fanno uso di nuovo EL 2,2 capacità di richiamare direttamente metodi come String#concat():

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

Se sei anche non su Servlet 3.0/EL 2.2 ancora, fare uso di <c:set> per creare un'altra variabile con il desi espressione rosso EL inline:

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

spero che ci sia un modo a una linea per questo, ma questa versione di facelet è abbastanza buona. grazie mille – gulygab

+0

Prego. Si noti che questa è una restrizione EL, non una restrizione JSF. EL non ha strutture per la concatenazione di stringhe all'interno di un'espressione. – BalusC

0

Penso che dovrete scrivere una funzione facelets concat(str1, str2).

+0

grazie mille per il suggerimento, si funziona bene con una funzione facelet. – gulygab

8

Questo dovrebbe risolvere il problema:

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

Ecco cosa ha funzionato per me: concat al di fuori del []

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