我想在下面的占位符中显示国际化消息。我正在尝试的所有示例,使用faces-config中定义的消息包,并简单地使用该包名称。但这只有在我们知道要使用哪个消息密钥时才有效。这不是这种情况。
考虑这个基本的例子:
<h:dataTable border="1" value="#{indexBean.webAdminCatalogList}" var="menuItem">
<h:column>#{message key here}</h:column>
</h:dataTable>
上面的代码循环遍历列表。每个menuItem
变量都包含titleMessageCode
,它对应于包属性文件中的字段。如何使用menuItem.titleMessageCode
获取邮件?是否有一个特殊的JSF标记,或者在构造bean时是否准备了这样的国际化标签?
答案 0 :(得分:1)
您可以使用括号表示法#{map[dynamicKey]}
将动态变量用作映射键。鉴于包名称为text
,以下是一个示例:
<h:dataTable border="1" value="#{indexBean.webAdminCatalogList}" var="menuItem">
<h:column>#{text[menuItem.titleMessageCode]}</h:column>
</h:dataTable>
请注意,这不是特定于JSF,而是特定于EL。那些#{}
事物不是JSF的一部分,它们是EL(表达式语言)的一部分。 JSF碰巧正好利用它。另请参阅our EL wiki page。