2009-04-01 33 views
6

Tôi đang cố gắng tạo biểu mẫu để chỉnh sửa hàng cơ sở dữ liệu hiện có. Tôi đang sử dụng thẻ mẫu Spring MVC để tự động liên kết html với một đối tượng sao lưu biểu mẫu. Hàng có mối quan hệ nhiều đến nhiều với một bảng khác, mà tôi đang cố gắng biểu diễn bằng một hộp chọn nhiều bằng cách sử dụng biểu mẫu: select tag;Biểu mẫu MVC mùa xuân: chọn Thẻ, nhiều lựa chọn không ràng buộc chính xác?

<form:select path="rules"> 
    <form:options items="${bundle.rules}" itemValue="name" itemLabel="name"/> 
</form:select> 

Tôi đang sử dụng Hibernate để duy trì để mối quan hệ được thể hiện dưới dạng HashSet bên trong thư mục Bundle.

private Set<Rule> rules = new HashSet<Rule>(0); 

Nếu không có sự lựa chọn hộp trên trang, đối tượng sẽ cập nhật cơ sở dữ liệu một cách chính xác, tuy nhiên với các hộp lựa chọn đối tượng sẽ không cập nhật cơ sở dữ liệu và tôi nhận được lỗi này trong nhật ký log4j của tôi, lưu ý rằng lỗi này không gây ra ngoại lệ, nó chỉ hiển thị trong nhật ký;

DEBUG org.springframework.web.servlet.mvc.SimpleFormController.processFormSubmission(SimpleFormController.java:256) - Data binding errors: 1 

Điều này xảy ra bất kể tôi bỏ chọn các mục bên trong hộp chọn, toàn bộ biểu mẫu từ chối gửi chính xác. Ai giúp tôi với?

Tôi biết về How do I bind collection attributes to a form in Spring MVC, tương tự như câu hỏi này, rất tiếc, không có đề xuất nào hữu ích cho vấn đề của tôi.

+0

Có vẻ như một số thông báo lỗi của bạn đã bị cắt - bạn có còn lỗi nào nữa không? Theo dõi ngăn xếp? –

+0

Cũng vì lý do nào đó, thông báo của anh ấy ở cấp độ Gỡ lỗi. Nó không thực sự là một ngoại lệ. Tôi viết sai khi tôi đề cập đến một dấu vết ngăn xếp, tôi sẽ sửa lỗi đó ngay bây giờ. –

Trả lời

8

Sự cố xảy ra với việc gửi biểu mẫu của bạn. Spring không thể liên kết đối tượng của lệnh, do đó, nó không gửi biểu mẫu, nhưng chuyển hướng bạn đến formView để thay thế.

Khi ràng buộc được thực hiện thành công, bạn sẽ thấy thông báo này thay vì:

No errors -> processing submit 

Để giải quyết vấn đề của bạn, bạn sẽ cần phải đăng ký một CustomCollectionEditor với bộ điều khiển của bạn. (Xem này link). Nó sẽ giống như sau:

protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception 
{ 
    binder.registerCustomEditor(Set.class, "rules", new CustomCollectionEditor(Set.class) 
    { 
    protected Object convertElement(Object element) 
    { 
     String name = ""; 

     if (element instanceof String) 
      name = (String) element; 

     return name != null ? new Rule(name) : null; 
    } 
    }); 
} 
+0

Cảm ơn, rất tiếc, tôi không thể đọc được từ công việc. Nếu bạn có thể đăng thêm chi tiết, tôi sẽ đánh giá cao nó. –

+0

Đây là những gì tôi cần làm. Khi tôi đã triển khai đoạn mã của bạn, mọi thứ đã hoạt động. Bạn có thể giới thiệu một nguồn học tập tốt cho Spring MVC không? Tôi đã đọc tài liệu hướng dẫn/hướng dẫn trên SpringSource.org và tôi đã mua cuốn sách Spring In Action, nhưng không có độ sâu tôi cần. –

Các vấn đề liên quan