首页
学习
活动
专区
圈层
工具
发布

il8n
EN

Stack Overflow用户
提问于 2015-03-16 14:03:59
回答 1查看 250关注 0票数 1

我想要创建一个p:selectOneMenu项,其中的值和选定的值显示转换字符串。因此,如果用户已将其语言转换为法语,则下拉内容和选择都将以法语等方式显示。

目前,我有一个要显示的值列表,每个值都知道它们在每种语言中的字符串值是什么(我意识到这可能是一个反模式,一旦运行就会重构)。

我已经解决了使用以下代码以翻译的方式显示下拉元素的问题。我还创建了Omnifaces SelectItemsConverter类的一个子类,以获得每个对象的转换字符串。

代码语言:javascript
复制
<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>

LinkageTypeSelectItemsConverter

代码语言:javascript
复制
@FacesConverter("linkageTypeSelectItemsConverter")
public class LinkageTypeSelectItemsConverter extends SelectItemsConverter implements Serializable {

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        final String locale = context.getApplication().evaluateExpressionGet(context,
                                                                       "#{language.localeCode}",
                                                                       String.class);

        if (value instanceof LinkageTypeKey) {
            return ((LinkageTypeKey) value).getKeyValue(locale);
        } else {
            return super.getAsString(context, component, value); 
        }
    }
}

当表单显示时,我可以调试这个转换器,它的返回值被翻译了,但是所选的元素ID总是以默认语言英语显示。有什么想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 14:24:05

转换器用于转换项值,而不是项标签。

您需要显式地指定itemLabel

代码语言:javascript
复制
<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,甚至可以不使用转换器就可以完成这一任务。

另请参阅:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29078771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档