gpt4 book ai didi

jsf - 我如何使用 omnifaces 合并将空值转换为数字,以便在 ChoiceFormat 中使用

转载 作者:行者123 更新时间:2023-12-02 05:06:27 25 4
gpt4 key购买 nike

我目前有以下 JSF:

<p:outputLabel value="#{msg['label.address.province']}" 
rendered="#{address.country ne CountryEnum.UNITED_STATES.country}"/>
<p:outputLabel value="#{msg['label.address.province']}"
rendered="#{address.country eq CountryEnum.UNITED_STATES.country}"/>

我的属性文件包含

label.address.province=Province
label.address.state=State

这很好,当国家是“美国”时,我的标签输出“州”,对于任何其他国家,它输出“省”。

我本来想做的是尝试去掉两个标签条目,只使用一个,在 messages.properties 中选择格式。我的第一次尝试是这样的:

<h:outputFormat value="#{msg['label.address.province.choice']}">
<f:param value="#{address.country.id}"/>
</h:outputFormat>

label.address.province.choice={0, choice, 1#Province|2#State|3#Province}

在编辑地址时效果很好。但是在添加新地址时,根据我的业务规则,所有字段都是空白的。这意味着 address.country 为空,这意味着我的选择格式产生“空”作为输出。

然后我想到使用 omnifaces:

<h:outputFormat value="#{msg['label.address.province.choice']}">
<f:param value="#{o.coalesce(address.country.id, '1')}"/>
</h:outputFormat>

但这也会产生空值。 address 是我的托管 bean,country 是我自己的简单 javabean 类,id 是 java.io.Serializable 类型的属性。

我知道“address.country.id”是由 EL 评估的,它在遇到 null 时“很好地”停止并且不会抛出 NPE。但是,是否 coalesce 可能不会执行相同类型的行为,而我传入的必须是非 EL 表达式?抱歉,我才刚刚开始我的 JSF 冒险,所以我可能没有使用正确的词。

我也愿意采用完全不同的方法,这仍然会将我的 outputLabels 减少为某种类型的单个标签。

我正在使用 Mojarra 2.1.21、Primefaces 3.5、Omnifaces 1.4.1、Java 7、Tomcat 7

最佳答案

这里,

<f:param value="#{o.coalesce(address.country.id, '1')}"/>

有两个(实际上是三个)错误:

  1. 命名空间可能不正确,它至少不是默认的 OmniFaces EL 函数之一。来自OmniFaces homepage :

    The OmniFaces UI components/taghandlers and EL functions are available under the following XML namespaces:

    xmlns:o="http://omnifaces.org/ui"
    xmlns:of="http://omnifaces.org/functions"
  2. EL 函数运算符是:,而不是.。 EL 函数的语法为 namespace:functionname(...)

  3. 与具体问题无关的第三个错误是您指定的是字符串而不是数字作为值。 #{'1'} 应该是 #{1}

所以,总而言之,你应该有

<f:param value="#{of:coalesce(address.country.id, 1)}"/>

您的具体问题是因为 #{o} 可能不作为变量(例如托管 bean)存在于 EL 范围内的任何地方,因此评估为 null.

关于jsf - 我如何使用 omnifaces 合并将空值转换为数字,以便在 ChoiceFormat 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16223527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com