JSF 2.0: InputText-Element vom Typ Integer belegt mir das Eingabefeld mit einer 0 vor

Fools

Mitglied
Wunderschönen Guten Tag!

Bin leider schon wieder am verzweifeln und weiß mir nicht anders zu helfen als nochmal hier um Hilfe zu bitten.

Ich habe ein InputText-Element vom Typ Integer, dass mir beim Laden des Eingabe-Formulars das entsprechende Eingabefeld mit einer 0 vorbelegt. Dies ist aber von mir nicht erwünscht und würde das gerne unterbinden. Nur weiß ich einfach nicht wie...

Vielleicht noch ein wenig Code:

HTML:
<h:inputText id="field" value="#{customerBean.field}" converter="javax.faces.Integer" validator="#{validatorBean.validateField}" />


Code:
@ManagedBean(name = "customerBean")
public class Customer
{
   private int field;

   public int getfield()
   {
      return field;
   }

   public void setfield(int field)
   {
      this.field = field;
   }
}

Code:
@ManagedBean(name = "validatorBean")
public class Validator
{
  public void validateField(FacesContext ctx, UIComponent comp, Object inValue) throws ValidatorException
  {		
     int value = (Integer) inValue;
		
     if (!(value >= 0 && value <= 100) && !(value == -9))
     {
        throw new ValidatorException(new FacesMessage("Illegal entry! Legal values are: '0' to '400', '-9'.", null));
     }
  }
}

Wenn ich nun die Seite bzw. das Formular welches das inputText-Element enthält lade, dann erhalte ich folgendes Bild:

nullc.png


Also ein Eingabefeld, das mit einer 0 vorbelegt ist. Ich weiß natürlich, dass wenn in Java eine Integer-Variable deklariert wird, diese default-mäßig mit 0 initialisiert wird. Kann ich ja auch schlecht verhindern... und genau dieser Wert wird mir dann beim Laden des Formulars auch angezeigt. Wie kann ich das verhindern?


Vielen lieben Dank für jede Hilfestellung.
 
Hallo Fools,

das ist kein Bug, sondern ein Feature von deinem Tomcat 6 (den Du vermutlich benutzt). Darüber sind wir auch schon gestolpert.

Das wurde in den 6er Tomcat reingepatcht, um mit der JSP Spec konform zu sein. Ich meine das war Update 15 oder 16. Die Diskussion zu dem Bug findest Du hier:
https://issues.apache.org/bugzilla/show_bug.cgi?id=43285#c7

Um das Feature wieder los zu werden, musst du es konfigurieren: http://tomcat.apache.org/tomcat-6.0-doc/config/systemprops.html#Expression_Language

Das Property heißt "org.apache.el.parser.COERCE_TO_ZERO" und Du möchtest es auf "false" gesetzt wissen :)
 
Hallo Sentoo,

danke für den Hinweis. Ich hatte diesbezüglich im Netz auch schon was gefunden, nur dass ich eine andere Einstellung an meinem Tomcat machen musste. Hatte aber nichts gebracht...

Im Übrigen: Ja, ich benutze einen ziemlich aktuellen Tomcat 6. ;-)

Inzwischen habe ich aber mein Problem insofern umgangen, indem ich für meine Variable den Datentyp "Integer" statt den primitiven Datentyp "int" nehme. Integer ist standardmäßig auf "null" gesetzt, während int auf "0" gesetzt wird. :)
 

Neue Beiträge

Zurück