【问题标题】:JSF selectonemenu il8nJSF 选择菜单 il8n
【发布时间】:2015-03-16 14:03:59
【问题描述】:

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

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

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

<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

@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 始终以默认语言英语显示。想法?

【问题讨论】:

    标签: jsf primefaces omnifaces


    【解决方案1】:

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

    您需要明确指定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,它甚至可以在没有转换器的情况下完成。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多