2010-06-16 10 views
16

Moje zadanie polega na: utworzeniu atrybutu modelu według zadanych parametrów, w celu jego zatwierdzenia (w tej samej metodzie) i nadaniu go całości w widoku.Spring - dodanie BindingResult do nowo utworzonego atrybutu modelu

Dostałam ten przykładowy kod:

@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 
    } 
} 

To jest pewne prace, ale to część z tworzenia klucza z MODEL_KEY_PREFIX i nazwę atrybutu wygląda bardzo hackish a nie wiosna styl do mnie. Czy istnieje sposób, aby uczynić tę samą rzecz ładniejszą?

+0

Który interfejs i do której klasy jesteśmy w? I w jakiej metodzie? –

+0

Dodano klasę i metodę do kodu. – bezmax

+1

Nie sądzę, że będzie to dobry sposób na zrobienie tego. Weryfikacja powiązania polega na wiązaniu i sprawdzaniu poprawności parametrów, a nie arbitralnych obiektów biznesowych, więc jeśli chcesz to zrobić, będzie to nieco kłopotliwe. – skaffman

Odpowiedz

3

Skaffman odpowiedział na pytanie, ale zniknął, więc odpowiem mu za niego.

Właściwość sprawdzania powiązania służy do wiązania i sprawdzania poprawności parametrów, a nie dowolnych obiektów biznesowych.

Oznacza to, że jeśli potrzebuję wykonać jakieś niestandardowe sprawdzanie poprawności niektórych ogólnych danych, które były nie przesłane przez użytkownika - Potrzebuję dodać zmienną niestandardową, aby utrzymać ten stan i nie używać BindingResult.

To odpowiada na wszystkie pytania, które miałem z BindingResult, ponieważ myślałem, że musiał być użyty jako pojemnik na wszelkiego rodzaju błędy.

Jeszcze raz, dzięki @Skaffman.

+1

Bez obaw. Przy okazji, jeśli chcesz zamieścić komentarz skierowany do konkretnej osoby, dodaj prefiks "@ nazwa użytkownika" - w ten sposób użytkownik zostanie powiadomiony. – skaffman

+1

Potrzebuję dodać zmienną niestandardową, aby utrzymać ten stan i nie używać BindingResult. - Nie zgadzam się. To, co pokazujesz w swoim pytaniu, po prostu działa ... – honzajde

Powiązane problemy