2010-06-16 11 views
16

Il mio compito è - creare un attributo model in base a determinati parametri di richiesta, convalidarlo (nello stesso metodo) e assegnarlo interamente alla View.Spring: aggiunta di BindingResult all'attributo model appena creato

mi è stato dato questo codice di esempio:

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

questa cosa funziona certo, ma che parte con la creazione di chiave con MODEL_KEY_PREFIX e nome attributo sembra molto hacker e non uno stile di primavera per me. C'è un modo per rendere la stessa cosa più carina?

+0

Quale interfaccia e quale classe siamo? E in quale metodo? –

+0

Aggiunta classe e metodo al codice. – bezmax

+1

Non penso che ci sarà un bel modo per farlo. La validazione vincolante è lì per legare e validare i parametri, non oggetti di business arbitrari, quindi se vuoi farlo, sarà un po 'complicato. – skaffman

risposta

3

Skaffman ha risposto alla domanda ma è scomparso, quindi risponderò per lui.

La funzione di convalida dell'associazione è lì per associare e convalidare i parametri, non oggetti business arbitrari.

Ciò significa che se devo eseguire la convalida personalizzata di alcuni dati generali non inviati dall'utente, è necessario aggiungere alcune variabili personalizzate per conservare tale stato e non utilizzare BindingResult.

Questo risponde a tutte le domande che ho avuto con BindingResult, poiché pensavo che dovesse essere usato come contenitore per qualsiasi tipo di errore.

Ancora, grazie a @Skaffman.

+1

Nessun problema. A proposito, se vuoi pubblicare un commento indirizzato a una persona specifica, allora prefisso con '@ username' - in questo modo l'utente viene avvisato. – skaffman

+1

Ho bisogno di aggiungere alcune variabili personalizzate per mantenere tale stato e non utilizzare BindingResult. - Non sono d'accordo. Quello che mostri nella tua domanda funziona ... – honzajde

Problemi correlati