it-swarm.com.de

Akzeptieren Sie nur Ziffern für den h: inputText-Wert

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.

11
abhi

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." />
18
BalusC

<h:inputText onkeypress="if(event.which &lt; 48 || event.which &gt; 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

14
dasLort

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" />
9

Versuchen

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

Hier sind einige verschiedene Optionen:

  • Sie können @Digits aus bean validation verwenden.
  • Sie können f verwenden: convertNumber .
  • Sie können die Eingabe in einer Backing-Bean-Methode überprüfen (dazu finden Sie leicht Tutorials)
  • Wenn jsf 2.2 und html5 eine Option für Sie sind, können Sie <input type="number" /> verwenden.
  • Oder Sie können Ihre eigene Javascript-Validierung 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.

3
Simon

Das funktioniert für mich

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

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

1
Arturo Volpe

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).

1
YoYo

Anstelle von PrimeFaces Extension können Sie jetzt verwenden!

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

0
Mehrdad Mohajer