目前,我有以下JSF:如何使用omnifaces合併轉空爲若干個,用於ChoiceFormat
<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中使用choiceformat。我第一次嘗試看起來像:
<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爲null,這意味着我的choiceformat產生'null'作爲輸出。
轉念一想使用omnifaces:
<h:outputFormat value="#{msg['label.address.province.choice']}">
<f:param value="#{o.coalesce(address.country.id, '1')}"/>
</h:outputFormat>
不過這也產生空。地址是我的託管bean,國家是我自己的簡單javabean類,id是java.io.Serializable
類型的屬性。
我知道「address.country.id」是由EL評估的,當它遇到null並且不拋出NPE時,它「很好」停止。但是,這可能是合併不會做同樣的行爲,我傳入的內容必須是非EL表達式?對不起,我剛剛開始我的JSF冒險,所以我可能不會使用正確的單詞。
我也開始採取一種完全不同的方法,它仍然將我的outputLabels減少爲某種類型的單個標籤。
我用鑽嘴魚科2.1.21,Primefaces 3.5,Omnifaces 1.4.1,Java 7中,Tomcat的7
恐怕你的問題只是一個簡單的錯字。它是'#{of:coalesce(...)}',而不是'#{o.coalesce(...)}''''''''命名空間被聲明爲'xmlns:of =「http://omnifaces.org /功能「'。使用EL功能時請注意冒號而不是句號。另見http://showcase.omnifaces.org/functions/Objects – BalusC 2013-04-25 20:00:20
呵呵,真是個愚蠢的錯誤:/。其實,我已經在我的命名空間中聲明瞭xmlns:o,並且在同一頁面上(爲了能夠使用Enums)我已經有了',它的工作原理。但是,將其更改爲「of」,只是可以肯定的,使用冒號,我現在得到: javax.el.ELException:找不到函數'of:coalesce' –
MikeCWpg
2013-04-25 20:12:41
哦。咄。兩個命名空間,一個是o,另一個是。得到它了。 – MikeCWpg 2013-04-25 20:18:11