Gibt es eine Möglichkeit, den Wert eines h:inputText
in JSF zu bestätigen, der nur Ziffern akzeptieren soll. Bedeutet, dass es eine Integer
oder die float
sein kann.
Wenn ich 12s3a562.675
, a5678s12
, 68712haf.563345
oder andere Werte dieser Art eingebe, sollte ein Fehler angezeigt werden. Ansonsten akzeptiert und geht es weiter.
Binden Sie einfach den Eingabewert an eine Double
- oder besser BigDecimal
-Eigenschaft anstelle von String
.
private BigDecimal number; // Double can also, but beware floating-point-gui.de
<h:inputText value="#{bean.number}" />
JSF hat eingebaute Konverter für die Typen, die automatisch aktiviert werden. Sie können die Konvertierungsnachricht wie folgt anpassen:
<h:inputText value="#{bean.number}" converterMessage="Please enter digits only." />
<h:inputText onkeypress="if(event.which < 48 || event.which > 57) return false;"/>
ist ein kurzer Weg, wenn Sie nur Ganzzahlen akzeptieren möchten.
Es hat gegenüber type="number"
den Vorteil, dass Sie nicht einmal eine Nicht-Ziffer eingeben können
Wenn Sie dies zu Ihrer Xhtml hinzufügen
xmlns: pe = "http://primefaces.org/ui/extensions"
verwenden Sie den inputext für die Anzahl der Primefaces-Erweiterungen mit dem Namen pe: inputNumber , die nicht nur Ihre Zahlen, sondern auch Dezimalzahlen validieren, möglicherweise vollständiger sein.
<pe:inputNumber value="#{beanTest.myValue}" thousandSeparator="" decimalSeparator="." decimalPlaces="0" />
Versuchen
<h:inputText value="SomeValue" converter="javax.faces.Double" />
Hier sind einige verschiedene Optionen:
@Digits
aus bean validation verwenden.<input type="number" />
verwenden.Ich denke, die besten Optionen sind entweder Bean Validation, f: convertNumber oder HTML5, da diese am saubersten sind und Ihnen den am wenigsten redundanten Code bieten.
Das funktioniert für mich
onkeypress="if( (event.which < 48 || event.which > 57) ) return false;"
Sie können eine JS-Validierung verwenden
Zunächst müssen Sie eine JS-Funktion definieren, um die Eingabe zu überprüfen
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();
}
}
}
}
Zweitens: Erfassen Sie in Ihrer h: Eingabe das Ereignis onKeyPress und rufen Sie die Funktion auf
<h:inputText value="..." onKeyPress="validateInput('[0-9]*')/>
Sie können nur Zahlen eingeben.
Sie können diese Verwendung leicht auf andere Fälle ausdehnen, wenn Sie andere reguläre Ausdrücke überprüfen müssen.
Beachten Sie, dass dies nur mit Tastendruck funktioniert. Wenn Sie ein anderes Benutzerereignis erfassen möchten, verwenden Sie das entsprechende Tag.
Prost
Wenn Sie bereit sind, Primefaces zu verwenden, können Sie ein <p:keyFilter>
zu einem <h:inputText>
oder <p:inputText>
.
Beispiel:
<h:inputText id="text1" value="#{bean.intValue}" />
<p:keyFilter for="text1" mask="pint" />
<p:inputText id="text2" value="#{bean.numberValue}" >
<p:keyFilter mask="num" />
</p:inputText>
Dadurch wird die Tastatureingabe blockiert, um nur eine gültige Ganzzahleingabe (int
/pint
) oder eine Dezimaleingabe (num
/pnum
) zuzulassen . Die Typen pnum
und pint
erlauben nur positive Eingaben (ohne Vorzeichen).
Anstelle von PrimeFaces Extension können Sie jetzt verwenden!
https://www.primefaces.org/showcase/ui/input/inputNumber.xhtml