如何国际化从 JSF 中的数据库接收的 selectOneMenu 下拉项?

How to internationalize selectOneMenu drop down items which recived from DataBase in JSF?

我需要为 selectOneMenu JSF 组件国际化项目。如何处理从数据库接收到的列表?

<p:selectOneMenu id="action" value="#{mapBean.newAction}" style="width:150px">
                        <f:selectItem itemLabel="Action" itemValue="Empty"
                            noSelectionOption="false" />
                        <f:selectItems value="#{mapBean.actions}" />
</p:selectOneMenu>

对于 mapBean.actions 我需要根据所选语言动态更改值 现在我不知道如何实现这个。

据我了解你的问题,你有 "Locale" 属性 的对象列表。并且您想在 selectOneMenu 中仅显示具有指定语言环境的项目。你可以做这样的事情来过滤 selectItems:

    <p:selectOneMenu id="action" value="#{mapBean.newAction}" style="width:150px">
                            <f:selectItem itemLabel="Action" itemValue="Empty"
                                noSelectionOption="false" />
                            <f:selectItems value="#{mapBean.actions}" 
                                var="item" itemDisabled="#{item.locale ne 'en'}"/>
    </p:selectOneMenu>

并将此添加到 css 到您的页面以不显示禁用的项目:

.ui-selectlistbox-item.ui-state-disabled {
    display: none;
}

这是来自this answer

的解决方案