2011-03-22 4 views
0

J'ai un inputText qui prend une valeur de l'utilisateur et est lié à un double. Si la valeur est "5000", les pages suivantes l'afficheront comme "5000.0". Existe-t-il un moyen de le formater de telle sorte que si l'utilisateur entre un nombre non fractionnaire, il n'affichera pas la décimale?Formater un double pour les nombres non fractionnaires dans JSF

Exemples:
utilisateur entre "5000" Show "5000"
utilisateur entre "5000.1" Show "5000.1"

<h:inputText value="#{sessionScope.eventDO.area}" id="areaInTxtId"> 
    <f:convertNumber pattern="###0"/> 
</h:inputText> 

J'ai essayé d'utiliser le f: tag convertNumber ci-dessous mais j'obtiens cette erreur:

java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double

que je ne veux pas ch ange n'importe quel code Java. Seule la présentation du double.

Répondre

0

Le convertisseur convertira simplement le nombre pour une utilisation ultérieure. Si vous voulez ajouter un comportement spécifique en interagissant avec l'utilisateur, essayez et utilisez l'événement javascript "onkeyup" et manipulez avec les données fournies. La présentation est spécifique à l'utilisateur et doit donc être en dehors du serveur.

1

Si vous ne trouvez pas de motif, vous pouvez écrire votre propre extension de NumberConverter. Je ne ai jamais essayé, mais il devrait fonctionner comme cela similaire:

@FacesConverter(value="ExampleConverter") 
public class ExampleConverter extends NumberConverter { 

    String getAsString(FacesContext context, UIComponent component,Object value) { 
    // call super.getAsString(...) and cut trailing .0 
    } 
} 

Utilisez le convertisseur dans la Facelet façon suivante:

<h:inputText value="#{sessionScope.eventDO.area}" id="areaInTxtId"> 
    <f:converter converterId="exampleConverter" /> 
</h:inputText> 
Questions connexes