ADF : Comparer Number et Integer dans une Expression Language

Vous qui développez avec le framework ADF, il vous est déjà arrivé – ou vous arrivera un jour – de vouloir comparer un oracle.jbo.domain.Number avec un nombre entier dans une Expression Language. Sûrement pour afficher un nombre d’éléments quelconques.
Supposons que vous ayez un bindings nommé CountElements de type Number qui vous fourni ce nombre. Vous avez envie d’écrire la ligne suivante dans votre jsff.

<af:outputText value="#{bindings.CountElements.inputValue} elements in my page" id="ot1"/>

Dans la ligne ci-dessus, vous remarquez que le mot « elements » sera toujours au pluriel, alors vous allez me proposer la solution suivante :

<af:outputText value="#{bindings.CountElements.inputValue} #{bindings.CountElements.inputValue>1?'elements':'element'} in my page" id="ot1"/>

Mais si vous testez ce code, vous obtiendrez dès la première exécution l’exception suivante :

java.lang.IllegalArgumentException: Cannot convert 5 of type class oracle.jbo.domain.Number to class java.lang.Long


Pour résoudre ce problème, je vous invite donc à utiliser la méthode getValue() de la classe Number de la façon suivante :

<af:outputText value="#{bindings.CountElements.inputValue} #{bindings.CountElements.inputValue.value>1?'elements':'element'} in my page" id="ot1"/>

Vous aurez sûrement un warning : « Reference binding.CountElements.inputValue.value not found » mais ne vous inquiétez pas, vous gérez la situation et vous savez ce que vous faites, tout va bien.