Jsf 如何使用omnifaces合并将空值转换为数字,以便在ChoiceFormat中使用
我目前拥有以下JSF:Jsf 如何使用omnifaces合并将空值转换为数字,以便在ChoiceFormat中使用,jsf,omnifaces,Jsf,Omnifaces,我目前拥有以下JSF: <p:outputLabel value="#{msg['label.address.province']}" rendered="#{address.country ne CountryEnum.UNITED_STATES.country}"/> <p:outputLabel value="#{msg['label.address.province']}" rendered="#{addr
<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}"/>
这很好,当国家是“我们”时,我的标签输出“州”,而对于任何其他国家,它输出“省”
我想做的是,试着去掉两个标签条目,只使用一个,在messages.properties中使用choiceformat。我的第一次尝试看起来像:
<h:outputFormat value="#{msg['label.address.province.choice']}">
<f:param value="#{address.country.id}"/>
</h:outputFormat>
在编辑地址时,它工作得很好。但根据我的业务规则,在添加新地址时,所有字段都是空白的。这意味着address.country为null,这意味着我的choiceformat生成“null”作为输出
然后我想使用omnifaces:
<h:outputFormat value="#{msg['label.address.province.choice']}">
<f:param value="#{o.coalesce(address.country.id, '1')}"/>
</h:outputFormat>
但这也会产生null。address是我的托管bean,country是我自己的简单javabean类,id是类型为java.io.Serializable
的属性
我知道“address.country.id”是由EL计算的,当它遇到null并且没有抛出NPE时,它“很好地”停止。但是,也许coalesce不做同样的行为,我传递的一定是非EL表达式?抱歉,我刚刚开始我的JSF冒险,所以我可能没有使用正确的词语
我也愿意采取完全不同的方法,这仍然会将OutputLabel减少为某种类型的单个标签
我在这里使用的是Mojarra 2.1.21、Primefaces 3.5、Omnifaces 1.4.1、Java 7、Tomcat 7
<f:param value="#{o.coalesce(address.country.id, '1')}"/>
:
,而不是
。EL函数的语法为名称空间:functionname(…)
{'1'}
应该是{1}
<f:param value="#{of:coalesce(address.country.id, 1)}"/>
您的具体问题是因为
{o}
不可能作为变量(例如托管bean)存在于EL范围内的任何位置,因此计算结果为null
,恐怕您的问题只是一个简单的输入错误。它是{of:coalesce(…)}
,而不是{o.coalesce(…)}
,其中的
名称空间声明为xmlns:of=”http://omnifaces.org/functions“
。使用EL函数时,请注意冒号而不是句号。也看看哦,该死的,多么愚蠢的错误:/。实际上,我在我的命名空间中将它声明为xmlns:o,在同一页上(为了能够使用枚举),我已经得到了
,并且它可以工作。但是,可以肯定的是,将其改为“of”,并使用冒号,我现在得到:javax.el.ELException:Function'of:coalesce'而不是foundoh。嗯。两个名称空间,一个是o,另一个是of。明白了,谢谢。最后一点是“1”应该只是普通的1。否则它是一个无法将给定对象格式化为数字的异常。
<f:param value="#{o.coalesce(address.country.id, '1')}"/>
xmlns:o="http://omnifaces.org/ui"
xmlns:of="http://omnifaces.org/functions"
<f:param value="#{of:coalesce(address.country.id, 1)}"/>