UI上有一个非平凡的菜单。 它的项目以循环方式命名:
循环开始
<li>
<h:commandLink action="#{menuItem.getGlobalTransitionName()}">#{resourceBundle.getMessage(menuItem.id,null,menuItem.id,null)}
</h:commandLink>
</li>
循环结束
调用上面执行的resourceBundle,其中设置了默认语言环境 - 它被硬编码为null
值,因此始终解析为En
:
#{resourceBundle.getMessage(menuItem.id,null,menuItem.id,null)}
我尝试了什么:
1。这会调用解析错误:
#{resourceBundle.getMessage(menuItem.id,null,menuItem.id,${externalContext.locale})}
2。这也会引发错误:
#{resourceBundle.getMessage(menuItem.id,null,menuItem.id,#{resourceBundle.locale})}
如何在那里传递真正使用过的语言环境?
答案 0 :(得分:1)
嵌套EL表达式确实无效。不要那样做。另外,ExternalContext
没有getLocale()
方法。您想要使用#{facesContext.viewRoot.locale}
。
#{resourceBundle.getMessage(menuItem.id,null,menuItem.id,facesContext.viewRoot.locale)}