当前位置: 首页 > 知识库问答 >
问题:

i18n适用于带有右SelectItemGroup的SelectOne菜单

盛柏
2023-03-14

在我的JSF应用程序与Primeface 5.3中,我有一个SseltOneMenu,其中包含SseltItemGroup条目,其中条目需要翻译。

我的XHTML代码片段:

<p:selectOneMenu id="status" value="#{bean.status}">
    <f:selectItems value="#{bean.statusItems}"
        var="status"
        itemLabel="#{bundle[status.label]}"
        itemValue="#{status}"/>
</p:selectOneMenu>

这里我使用“#{bundle[status.label]}”进行翻译,但始终会显示Bean类中生成的标签,而不会显示我的资源包中已翻译的字符串!

我的Bean类代码片段:

public class Bean {
    @PostConstruct
    public void init() {
        SelectItemGroup g1 = new SelectItemGroup("status.offerPhase");
        g1.setSelectItems(
                new SelectItem[]{
                        new SelectItem("untreated", "status.offerPhase.untreated"),
                        new SelectItem("In Progress", "status.offerPhase.untreated.inProgress"),
                });

        SelectItemGroup g2 = new SelectItemGroup("status.ongoing");
        g2.setSelectItems(
                new SelectItem[]{
                        new SelectItem("Order received", "status.ongoing.orderReceived"),
                        new SelectItem("Ongoing construction site", "status.ongoing.ongoingConstructionSite"),
                });

        SelectItemGroup g3 = new SelectItemGroup("status.completed");
        g3.setSelectItems(
                new SelectItem[]{
                        new SelectItem("Finished", "status.completed.finished"),
                        new SelectItem("Archived", "status.completed.archived"),
                });
        statusItems = new ArrayList<>();
        statusItems.add(g1);
        statusItems.add(g2);
        statusItems.add(g3);
    }

    private List<SelectItem> statusItems;
    public List<SelectItem> getStatusItems() {
        return statusItems;
    }
}

它也不工作,如果我不使用像这样的选择对象组:

    @PostConstruct
    public void init() {
        statusItems = new ArrayList<>();
        statusItems.add(new SelectItem("untreated", "status.offerPhase.untreated"));
        statusItems.add(new SelectItem("In Progress", "status.offerPhase.untreated.inProgress");
    }

使用这样的枚举工作:

<p:selectOneMenu id="status2" value="#{bean.statusEnum}">
    <f:selectItems value="#{bean.statusEnum}"
        var="status"
        itemValue="#{status}"
        itemLabel="#{bundle[status.name()]}"/>
</p:selectOneMenu>

public enum Status {
    STATUS_UNTREATEFD, STATUS_IN_PROGRESS, STATUS_COMPLETED
}
public Status[] getStatusEnum() {
    return Status.values();
}

捆绑包属性:

STATUS_UNTREATED=Untreated
STATUS_IN_PROGRESS=In Progress
status.offerPhase.untreated=Untreated
status.offerPhase.inProgress=In Progress

我到底做错了什么?

共有1个答案

汪正雅
2023-03-14

在这里输入code当使用javax.faces.model.SseltItem作为模型值时,var将表示其,而不是SseltItem本身。项目值已经表示为SseltItem实例本身的value,并且项目标签已经表示为SseltItem实例本身的标签

换句话说,当提供SseltItem的列表或数组时,您根本不需要varitemLabelitemValue

<f:selectItems value="#{bean.statusItems}" />

至于i18n'ing标签,抓取/注入bean中的资源包#{bundle},并在那里完成工作。例如。

new SelectItemGroup(bundle.getString("status.offerPhase"));
  • JSF 2.0中按应用程序#getResourceBundle()和ResourceBundle#getBundle()的区别
 类似资料:
  • 我有一个提交表单,并希望显示一行,如果选择的关系是儿子或女儿,他们输入生日。 > 最初我没有使用p:row或p:column,而是使用面板网格上的columns属性。但是基于这个如何通过BalusC呈现 ,我知道我需要一个包装器组件,这就是为什么我使用p:row路由的原因。 但是,有没有一种更干净的方法可以不在文本输入上使用所有的p:rows和额外的ajax呢?

  • 我试图通过从展示中获取代码来使primeface元素出现在我的页面上,菜单在一些修改后运行良好,但selectonemenu拒绝出现。 它在布局单元中没有显示任何内容。这是我的xhtml代码:

  • 问题内容: 我打算将Java的标准i18n系统与ChoiceFormat类一起使用复数形式,但随后意识到它不能处理某些语言(例如波兰语)的复数规则。如果它只处理类似于英语的语言,那似乎毫无意义。 有哪些选项可以实现正确的复数形式?使用它们的利弊是什么? 问题答案: 好了,您已经正确标记了问题,所以我假设您了解ICU的一两件事。 使用ICU,您有两种选择来正确处理复数形式: PluralRules,

  • 关于我的上一个问题(bootstrap上的下拉菜单不起作用),我正在为li下拉菜单的子菜单构建一个子菜单。这意味着它是嵌套的。银行菜单下有交易下拉菜单,交易下拉菜单下有不同类型交易的菜单。顺便说一下,我已经成功地创建了它,但是在悬停期间,“事务”模块的子菜单出现在事务菜单的前面,阻止了作为事务的父菜单。在悬停期间,如何避免它并将其放置在事务菜单的右侧?不管怎样,我已经使用了“右下拉菜单”,但它不会

  •  点下鼠标右键后呼叫的 KAG 的游戏界面。  例如使用右键来调出存储/读取画面。 总之先上范例  调用右键菜单的指令是 rclick 。使用这个指令、可以设定点下右键后呼叫的剧本段落。此外,也可以不使用呼叫(调用菜单后,使用return可以返回游戏),而是直接跳转到某个标签(右键跳跃后无法返回,等同于jump)。  例如,在 rlick.ks 里写入以下内容。 例: *rclick @rclic

  • 问题内容: 我想使用数据库存储i18n键/值对,以便我们可以在运行时修改/重新加载i18n数据。有人做过吗?还是有人对如何实现这一点有想法?我已经阅读了几个相关的主题,但是还没有看到可行的解决方案。 我专门指的是可以与jstl标记一起使用的东西,例如 我认为这将涉及扩展ResourceBundle,但是当我尝试这样做时,我遇到了与jstl标记获取资源包的方式有关的问题。 问题答案: 您是否只是问如