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.
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." />
<h:inputText onkeypress="if(event.which < 48 || event.which > 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.
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" />
Essayer
<h:inputText value="SomeValue" converter="javax.faces.Double" />
Voici différentes options:
@Digits
à partir de validation de bean .<input type="number" />
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.
Cela fonctionne pour moi
onkeypress="if( (event.which < 48 || event.which > 57) ) return false;"
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é
Au lieu de PrimeFaces Extension pour vous pouvez utiliser maintenant!
https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml