20

Tôi có một bó tài nguyên với mục như thế này:String nối trong EL cho ResourceBundle động chủ chốt

entry1=value1 
entry2=value2 
entry3=value3 

Trong trang JSF của tôi, tôi đang cố gắng để sử dụng các phím tự động. ID của mục nhập đến từ một bean được quản lý. Tôi nghĩ rằng nó phải là một cái gì đó như thế này:

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

Làm thế nào tôi có thể đạt được điều này?

Trả lời

41

Nếu bạn đã có trên Servlet 3.1/EL 3.0 (Tomcat 8, WildFly 8, GlassFish 4, vv), hãy sử dụng mới EL 3,0 += điều hành:

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

Nếu bạn chỉ trên servlet 3.0/EL 2.2 (Tomcat 7, JBoss AS 6/7, GlassFish 3, vv), tận dụng khả năng mới EL 2.2 trực tiếp gọi các phương pháp như String#concat():

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

Nếu bạn thậm chí không phải trên Servlet 3.0/EL 2.2, hãy sử dụng <c:set> để tạo biến khác với desi biểu EL đỏ inlined:

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

Tôi hy vọng có một cách một chiều cho điều này, nhưng phiên bản facelet này là đủ tốt. cảm ơn rất nhiều – gulygab

+0

Bạn được chào đón. Lưu ý rằng đây là một hạn chế EL, không phải là một hạn chế JSF. EL không có cơ sở để nối chuỗi bên trong một biểu thức. – BalusC

0

Tôi nghĩ bạn sẽ phải viết chức năng facelets concat(str1, str2).

+0

thanks a lot cho gợi ý, nó hoạt động tốt với chức năng facelet. – gulygab

8

này nên giải quyết vấn đề của bạn:

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

Đây là những gì làm việc cho tôi: concat ngoài []

<h:outputText value="#{msg['entry'].concat(managedBean.entryIndex)}" /> 
Các vấn đề liên quan