Customizing PropertyEditorSupport im Frühjahr

Ich arbeite mit Spring 3.2. Um zu überprüfen double-Werte weltweit, verwende ich CustomNumberEditor. Die Validierung ist in der Tat durchgeführt.

Aber wenn ich die Eingabe eine Zahl wie 1234aaa, 123aa45 und so weiter, ich erwarte, dass die NumberFormatException geworfen zu werden aber es funktioniert nicht. Die Doku sagt,

ParseException verursacht wird, wenn der Beginn der angegebenen Zeichenkette nicht
analysiert

Daher, solche Werte, wie oben erwähnt, analysiert werden, bis zu Sie die als zahlen dargestellt werden und der rest der Zeichenfolge wird dann weggelassen.

Um dies zu vermeiden, und machen es eine Ausnahme werfen, wenn solche Werte zugeführt werden, brauche ich zur Umsetzung meiner eigenen Property-Editor durch die Verlängerung der PropertyEditorSupport - Klasse wie bereits erwähnt in diesem Frage.

package numeric.format;

import java.beans.PropertyEditorSupport;

public final class StrictNumericFormat extends PropertyEditorSupport
{
    @Override
    public String getAsText() 
    {
        System.out.println("value = "+this.getValue());
        return ((Number)this.getValue()).toString();
    }

    @Override
    public void setAsText(String text) throws IllegalArgumentException 
    {
        System.out.println("value = "+text);
        super.setValue(Double.parseDouble(text));
    }
}

Die Editoren, die ich angegeben haben, innerhalb einer Methode annotiert mit der @InitBinder Anmerkungen sind wie folgt.

package spring.databinder;

import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.Format;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public final class GlobalDataBinder 
{
    @InitBinder
    public void initBinder(WebDataBinder binder, WebRequest request)
    {
        DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
        dateFormat.setLenient(false);
        binder.setIgnoreInvalidFields(true);
        binder.setIgnoreUnknownFields(true);
        //binder.setAllowedFields("startDate");
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));

        //The following is the CustomNumberEditor

        NumberFormat numberFormat = NumberFormat.getInstance();
        numberFormat.setGroupingUsed(false);
        binder.registerCustomEditor(Double.class, new CustomNumberEditor(Double.class, numberFormat, false));
    } 
}

Da bin ich mit Spring 3.2, die ich nutzen kann @ControllerAdvice


Aus Neugier, die überschrieben Methoden aus der PropertyEditorSupport Klasse in der StrictNumericFormat Klasse nie aufgerufen wird und die Anweisungen, leite die Ausgabe in der Konsole wie angegeben innerhalb dieser Methoden (getAsText() und setAsText()) nicht drucken alles auf der server-Konsole.

Habe ich versucht, alle Ansätze beschrieben, in all den Antworten, die Frage aber keine für mich gearbeitet. Was vermisse ich hier? Dies ist erforderlich, um zu konfigurieren, in einigen xml-Datei(en)?

InformationsquelleAutor Tiny | 2013-02-09
Schreibe einen Kommentar