JSF选择菜单il8n
我想创建一个p:selectOne菜单项,其中值和所选值显示翻译后的字符串。因此,如果用户已将其语言切换为法语,则下拉内容和选择都将以法语显示,等等 目前我有一个要显示的值列表,每个值都知道它们在每种语言中的字符串值是什么(我意识到这可能是一个反模式,一旦工作起来就会重构) 我已经用下面的代码解决了以翻译方式显示下拉元素的问题。我还创建了Omnifaces SelectItemsConverter类的子类,以获取每个对象的转换字符串JSF选择菜单il8n,jsf,primefaces,omnifaces,Jsf,Primefaces,Omnifaces,我想创建一个p:selectOne菜单项,其中值和所选值显示翻译后的字符串。因此,如果用户已将其语言切换为法语,则下拉内容和选择都将以法语显示,等等 目前我有一个要显示的值列表,每个值都知道它们在每种语言中的字符串值是什么(我意识到这可能是一个反模式,一旦工作起来就会重构) 我已经用下面的代码解决了以翻译方式显示下拉元素的问题。我还创建了Omnifaces SelectItemsConverter类的子类,以获取每个对象的转换字符串 <p:selectOneMenu value="
<p:selectOneMenu
value="#{linkagecontroller.selectedLink}"
converter="linkageTypeSelectItemsConverter"
var="lnk">
<f:selectItems value="#{linkagecontroller.linkageTypes}"
var="item"/>
<p:column>
<div class="link-item-#{lnk.linkageTypeId}">
<h:outputText value="#{lnk.getKeyValue(language.localeCode)}" />
</div>
</p:column>
</p:selectOneMenu>
当表单显示时,我可以调试这个转换器,它返回翻译的值,但所选元素ID始终以默认语言(英语)显示。想法?转换器用于转换项目值,而不是项目标签 您需要明确指定
itemLabel
<p:selectOneMenu
value="#{linkagecontroller.selectedLink}"
converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{linkagecontroller.linkageTypes}" var="item"
itemValue="#{item}" itemLabel="#{item.getKeyValue(language.localeCode)}" />
</p:selectOneMenu>
这只是一种有点奇怪的本地化方法。您通常将翻译放在资源包中,而不是放在模型本身中。如果它是enum
,甚至可以在没有转换器的情况下完成
另见:
<p:selectOneMenu
value="#{linkagecontroller.selectedLink}"
converter="omnifaces.SelectItemsConverter">
<f:selectItems value="#{linkagecontroller.linkageTypes}" var="item"
itemValue="#{item}" itemLabel="#{item.getKeyValue(language.localeCode)}" />
</p:selectOneMenu>