Wie mache ich den Zahleneingabebereich zunächst leer anstatt 0 oder 0.00?

Ich habe einen Eingabeplatz, der eine Nummer bekommen soll. Ich möchte, dass es als leer angezeigt wird. Wenn ich jedoch mein Programm starte, bekomme ich 0 oder 0.00 als Standard. Wie kann ich es leer machen?

Dies geschieht, wenn Sie den Wert an ein primitives Element anstelle seiner Wrapper-Repräsentation binden. Das primitive int standardmäßig auf 0 voreingestellt, und das primitive double immer 0.0 . Sie möchten stattdessen Integer oder Double (oder BigDecimal ) verwenden.

Z.B:

 public class Bean { private Integer number; // ... } 

Dann gibt es zwei weitere Dinge, die bei der Verarbeitung des Formulars berücksichtigt werden müssen. Zuerst müssen Sie JSF anweisen, leere übergebene String-Werte als null zu interpretieren, andernfalls wird EL die leere Zeichenkette immer noch auf 0 oder 0.0 . Dies kann über den folgenden Kontextparameter in web.xml :

  javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL true  

Zweitens, wenn Sie Tomcat / JBoss oder einen anderen Server verwenden, der den Apache EL Parser unter den Covern verwendet, müssen Sie ihn anweisen, NULL nicht auf 0 oder 0.0 im Fall von Number Typen durch das folgende VM-Argument zu erzwingen mit Number als wären sie Primitive):

 -Dorg.apache.el.parser.COERCE_TO_ZERO=false 

Siehe auch:

  • Der leere String-Wahnsinn
  • h: inputText, das an die Integer-Eigenschaft gebunden ist, sendet den Wert 0 anstelle von null
  • h: inputText, das an die String-Eigenschaft gebunden ist, sendet eine leere Zeichenfolge anstelle von null
  • javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL funktioniert seit Java EE 7 / EL 3.0 nicht mehr

Ich stimme nicht mit vorherigen Antworten überein, aber ich denke, dass Sie suchen könnten

    

und in der Steuerung

 private double number; // getters and setters private UIInput inputBox; // getters and setters public void preRenderInput() { // if it is the first request if(!FacesContext.getCurrentInstance().isPostback()) { inputBox.setValue(""); } } 

JSF 2.0+

Sie können inputfunction in der primefaces-Erweiterung anstelle von inputText verwenden. So was

  

In Ihrem XHTML-Code nehmen Sie an, dass Sie Ihr Eingabefeld wie folgt haben:

   

Ordnen Sie dieses Feld in Ihrer verwalteten Bean-Aktionsklasse wie folgt zu:

 @ManagedBean(name="yourAction") public class YourAction { private String newName; ... // Add Getter & Setter Methods ... } 

Auf diese Weise erhalten Sie in Ihren Eingabefeldern nicht 0 oder 0,00 als Standardwert.