2010-06-16 5 views
16

Nhiệm vụ của tôi là tạo thuộc tính mô hình bằng các tham số yêu cầu đã cho, để xác thực nó (trong cùng một phương thức) và đưa toàn bộ nó vào View.Spring - thêm BindingResult vào thuộc tính mô hình mới được tạo

tôi đã được đưa mã này ví dụ:

công trình chắc chắn
@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 
    } 
} 

điều này, nhưng đó là một phần trong việc tạo quan trọng với MODEL_KEY_PREFIX và tên thuộc tính trông rất hackish và không phải là một phong cách mùa xuân với tôi. Có cách nào để làm cho cùng một thứ đẹp hơn không?

+0

Giao diện và lớp học nào? Và phương pháp nào? –

+0

Đã thêm lớp và phương thức vào mã. – bezmax

+1

Tôi không nghĩ sẽ có một cách hay để làm điều này. Các điều xác nhận ràng buộc là có để ràng buộc và xác nhận các thông số, không phải đối tượng kinh doanh tùy ý, vì vậy nếu bạn muốn làm điều đó, nó sẽ có một chút lộn xộn. – skaffman

Trả lời

3

Skaffman trả lời câu hỏi nhưng biến mất, vì vậy tôi sẽ trả lời câu hỏi đó cho anh ấy.

Điều xác thực ràng buộc là có để ràng buộc và xác thực tham số, không phải các đối tượng kinh doanh tùy ý. Điều này có nghĩa, nếu tôi cần thực hiện một số xác nhận tùy chỉnh của một số dữ liệu chung là không được người dùng gửi - Tôi cần phải thêm một số biến tùy chỉnh để giữ trạng thái đó và không sử dụng BindingResult.

Điều này trả lời tất cả các câu hỏi tôi đã có với BindingResult, như tôi nghĩ rằng nó đã được sử dụng như một container cho bất kỳ loại lỗi nào.

Một lần nữa, cảm ơn @Skaffman.

+1

Không phải lo lắng. Nhân tiện, nếu bạn muốn đăng một bình luận được gửi đến một người cụ thể, hãy thêm tiền tố vào đó bằng '@ username' - theo cách đó người dùng được thông báo. – skaffman

+1

Tôi cần phải thêm một số biến tùy chỉnh để giữ trạng thái đó và không sử dụng BindingResult. - Tôi không đồng ý. Nội dung bạn hiển thị trong câu hỏi của mình chỉ hoạt động ... – honzajde