web-dev-qa-db-fra.com

Accepter uniquement les chiffres pour h: valeur inputText

Existe-t-il un moyen de confirmer la valeur d'un h:inputText dans JSF, qui ne devrait accepter que des chiffres. Cela signifie qu'il peut s'agir d'une Integer ou d'une float

Si je tape 12s3a562.675, a5678s12, 68712haf.563345 ou tout autre type de valeurs de ce type, cela devrait indiquer une erreur. Sinon, il accepte et procède.

11
abhi

Liez simplement la valeur d'entrée à une propriété Double ou, mieux, BigDecimal au lieu de String.

private BigDecimal number; // Double can also, but beware floating-point-gui.de
<h:inputText value="#{bean.number}" />

JSF a des convertisseurs intégrés pour les types qui se déclenchent automatiquement. Vous pouvez personnaliser le message du convertisseur comme ci-dessous:

<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />
18
BalusC

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 57) return false;"/> est un moyen court si vous voulez n'accepter que les entiers. 

Il présente l’avantage sur type="number" que vous ne pouvez même pas entrer de code non numérique.

14
dasLort

Si vous ajoutez ceci à votre xhtml

xmlns: pe = "http://primefaces.org/ui/extensions"

et utilisez inputext pour les nombres d'extensions Primefaces appelées pe: inputNumber , qui non seulement valident vos nombres, mais aussi les nombres décimaux, peuvent être plus complets.

<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
9
diego matos - keke

Essayer

<h:inputText value="SomeValue" converter="javax.faces.Double" />
4
Vasil Lukach

Voici différentes options:

  • Vous pouvez utiliser @Digits à partir de validation de bean .
  • Vous pouvez utiliser f: convertNumber .
  • Vous pouvez valider l'entrée dans une méthode de bean de sauvegarde (vous trouverez facilement des tutoriels pour cela)
  • Si jsf 2.2 et html5 sont une option pour vous, vous pouvez utiliser <input type="number" />
  • Ou vous pouvez utiliser votre propre validation Javascript.

Je pense que les meilleures options utilisent soit la validation Bean, f: convertNumber, soit l’utilisation de HTML5, car ce sont les plus propres et le moins redondant qui soit.

3
Simon

Cela fonctionne pour moi

onkeypress="if( (event.which &lt; 48 || event.which &gt; 57) ) return false;"
2
Daniel Azamar

Vous pouvez utiliser une validation JS

Tout d’abord, vous devez définir une fonction JS pour valider l’entrée

function validateInput(regexString) {
    var theEvent = window.event || event;
    var key = theEvent.keyCode || theEvent.which;
    if (key >= 46) {
        key = String.fromCharCode(key);
        var regex = new RegExp("^" + regexString + "$");
        if (!regex.test(key)) {
            theEvent.returnValue = false;
            if (theEvent.preventDefault) {
                theEvent.preventDefault();
            }
        }
    }
}

Deuxièmement, dans votre entrée h:, capturez l'événement onKeyPress et appelez la fonction

<h:inputText value="..." onKeyPress="validateInput('[0-9]*')/>

Et cela ne vous laissera que saisir des chiffres.

Vous pouvez facilement étendre cette utilisation à d'autres cas lorsque vous devez valider une autre regex.

Notez que cela ne fonctionne que lorsque vous appuyez sur une touche. Si vous souhaitez capturer un autre événement utilisateur, utilisez la balise appropriée.

À votre santé

1
Arturo Volpe

Au lieu de PrimeFaces Extension pour vous pouvez utiliser maintenant!

https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml

0
Mehrdad Mohajer