2010-06-16 25 views
16

Mi tarea es - crear un atributo de modelo por parámetros de solicitud dados, validarlo (en el mismo método) y entregarlo completo a la Vista.Spring: agregar BindingResult al atributo de modelo recién creado

Me dieron este código de ejemplo:

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

esta cosa, pero esa parte con la creación de llave con MODEL_KEY_PREFIX y nombre de atributo ve muy hacker y no un estilo de primavera para mí. ¿Hay alguna manera de hacer que lo mismo sea más bonito?

+0

¿Qué interfaz y en qué clase estamos? ¿Y en qué método? –

+0

Agregó la clase y el método al código. – bezmax

+1

No creo que haya una buena manera de hacer esto. La validación de enlace está ahí para vincular y validar parámetros, no objetos comerciales arbitrarios, por lo que si quieres hacer eso, va a ser un poco complicado. – skaffman

Respuesta

3

Skaffman respondió la pregunta, pero desapareció, por lo que voy a responder por él.

La validación de enlace está ahí para enlazar y validar parámetros, no objetos comerciales arbitrarios.

Eso quiere decir, que si tengo que hacer algo de validación personalizada de algunos datos generales que se no enviada por el usuario - Necesito añadir un poco variable personalizada para mantener esa condición y no utilizar BindingResult.

Responde todas las preguntas que tuve con BindingResult, ya que pensé que tenía que usarse como contenedor para cualquier tipo de error.

Nuevamente, gracias @Skaffman.

+1

Sin preocupaciones. Por cierto, si desea publicar un comentario dirigido a una persona específica, prefíjelo con '@ username' - de esa forma se notifica al usuario. – skaffman

+1

Necesito agregar alguna variable personalizada para mantener ese estado y no usar BindingResult. - No estoy de acuerdo. Lo que muestra en su pregunta simplemente funciona ... – honzajde

Cuestiones relacionadas