2010-01-13 42 views
10

Tôi đang sử dụng Spring MVC 3.0 và không thể nhìn thấy tất cả các phần của vấn đề này: bộ điều khiển của tôi sẽ tạo danh sách các đối tượng miền. Giả sử một đối tượng User đơn giản với các thuộc tính firstName, lastName, age và role. Tôi muốn xuất danh sách người dùng đó trong một bảng (một cột cho mỗi thuộc tính), mỗi hàng cũng có một hộp kiểm được chọn theo mặc định. Người sử dụng trang này có thể bỏ chọn một số người trong số họ. Khi họ nhấn nút gửi, tôi muốn có thể lấy danh sách người dùng được chọn và làm điều gì đó với họ.Spring MVC và Checkboxes

Tôi biết có một biểu mẫu: thẻ hộp kiểm trong Spring, nhưng tôi không thể thấy rõ cách sử dụng và cách lấy kết quả trong bộ điều khiển.

Bất kỳ trợ giúp hoặc đề xuất nào?

+0

@axtavt: chỉ để cung cấp thêm thông tin, tôi cũng phải vật lộn với formCheckbox, và cuối cùng đã từ bỏ nó. Ràng buộc mùa xuân không được hỗ trợ tốt cho các hộp kiểm –

Trả lời

20

Nếu bạn User đối tượng có một trường id, bạn có thể gửi id của người sử dụng lựa chọn như thế này (bạn thậm chí không cần thẻ form Spring cho kịch bản đơn giản này):

<form ...> 
    <c:foreach var = "user" items = "${users}"> 
     <input type = "checkbox" name = "userIds" value = "${user.id}" checked = "checked" /> <c:out value = "${user.firstName}" /> ... 
    </c:foreach> 
    ... 
</form> 

-

@RequestMapping (...) 
public void submitUsers(@RequestParam(value = "userIds", required = false) long[] userIds) 
{ 
    ... 
} 
+1

thuộc tính 'optional' trong' @ RequestParam' không còn hợp lệ, điều này có thể được thay thế bằng 'required' –

1

Khi trang có chứa hộp kiểm và biểu mẫu có chứa của nó được gửi, trình duyệt sẽ thực hiện như sau.

  • nếu hộp kiểm được chọn, nó được nộp cùng với 'giá trị' thuộc tính của nó như là một giá trị
  • nếu checkbos là không kiểm tra, biến không gửi gì cả.

Trong trường hợp của bạn, tôi sẽ thay đổi @RequestParam ("abono") thành @RequestParam (required = false, value = "abono") và sau đó kiểm tra Boolean của bạn là rỗng. Nếu nó là null, hộp kiểm đã không được đánh dấu bởi người dùng.

+0

Spring * * làm điều gì đó về điều này - xem http: // stackoverflow .com/questions/8723765/checkbox-values-do-không-bind-into-object-when-false # answer-8724006 – reinierpost