2010-06-16 10 views
16

Meine Aufgabe ist - ein Modellattribut durch gegebene Anfrageparameter zu erstellen, es zu validieren (in der gleichen Methode) und es der Ansicht vollständig zu geben.Spring - BindingResult zum neu erstellten Modellattribut hinzufügen

wurde ich dieses Beispiel-Code angegeben:

@Controller 
class PromotionController { 

    @RequestMapping("promo") 
    public String showPromotion(@RequestParam String someRequestParam, Model model) { 
     //Create the model attribute by request parameters 
     Promotion promotion = Promotions.get(someRequestParam); 

     //Add the attribute to the model 
     model.addAttribute("promotion", promotion); 

     if (!promotion.validate()) { 
      BindingResult errors = new BeanPropertyBindingResult(promotion, "promotion"); 
      errors.reject("promotion.invalid"); 
      //TODO: This is the part I don't like 
      model.put(BindingResult.MODEL_KEY_PREFIX + "promotion", errors); 
     } 
     return 
    } 
} 

Das Ding sicher funktioniert, aber auch diesen Teil mit MODEL_KEY_PREFIX Schlüssel erstellen und Attributnamen sieht sehr hackish und kein Frühling Stil zu mir. Gibt es eine Möglichkeit, das Gleiche schöner zu machen?

+0

Welche Schnittstelle und in welcher Klasse sind wir? Und in welcher Methode? –

+0

Die Klasse und Methode zum Code hinzugefügt. – bezmax

+1

Ich glaube nicht, dass es eine gute Möglichkeit dafür gibt. Die Bindungsvalidierung dient dazu, Parameter zu binden und zu validieren, keine willkürlichen Geschäftsobjekte. Wenn Sie das also tun wollen, wird es etwas unordentlich. – skaffman

Antwort

3

Skaffman beantwortet die Frage, aber verschwand, also werde ich es für ihn beantworten.

Die Binding-Validierung ist da, um Parameter zu binden und zu validieren, keine willkürlichen Geschäftsobjekte.

Das bedeutet, dass, wenn ich einige benutzerdefinierte Validierung einiger allgemeiner Daten, die nicht vom Benutzer - Ich muss einige benutzerdefinierte Variable, um diesen Status zu halten und nicht BindingResult verwenden müssen tun müssen.

Dies beantwortet alle Fragen, die ich mit BindingResult hatte, da ich dachte, dass es als Container für alle Arten von Fehlern verwendet werden musste.

Nochmals, danke @Skaffman.

+1

Keine Sorge. Übrigens, wenn Sie einen an eine bestimmte Person adressierten Kommentar posten wollen, dann setzen Sie ihn mit "@ Benutzername" voran - auf diese Weise wird der Benutzer benachrichtigt. – skaffman

+1

Ich muss eine benutzerdefinierte Variable hinzufügen, um diesen Status beizubehalten und BindingResult nicht zu verwenden. - Ich stimme nicht zu. Was du in deiner Frage zeigst, funktioniert einfach ... – honzajde

Verwandte Themen