Trường hợp sử dụng khá phổ biến xảy ra khi có danh sách đối tượng Java, từ đó bạn có thể thực hiện lựa chọn trên biểu mẫu web. đối tượng là giá trị để bộ điều khiển có thể thực hiện tra cứu hoặc chỉ cần gắn khóa cho đối tượng nào được tạo/cập nhật.Spring MVC - Lựa chọn đối tượng thả xuống - Không có mã định danh chính
Vấn đề của tôi là danh sách để chọn không phải là đối tượng khóa, liên tục, chúng là các mô hình kinh doanh từ một dịch vụ không có cách hợp lý để truy xuất chúng dựa trên dữ liệu chứa. Dưới đây là một số mã psuedo nơi một danh sách các Foo được đưa ra cho trang, và chúng ta có thể dễ dàng giao tiếp với bộ điều khiển onSubmit tên của Foo, nhưng nếu có các lĩnh vực khác của Foo cần phải được nộp?
điều khiển:
referenceData() {
...
List foos = fooService.getFoosForBar(bar)
return { 'foos', foos }
}
jsp:
<form>
...
<spring:bind path="formData.foo">
<select name="<c:out value="${status.expression}" />">
<c:forEach items="${foos}" var="foo">
<option value="<c:out value="${foo.name}"/>">
<c:out value="${foo.name}"/>
</option>
</c:forEach>
</select>
</spring:bind>
...
</form>
Một số giải pháp ví dụ sẽ được sử dụng trường dữ liệu ẩn nộp các tài sản khác Foo và giữ chúng trong đồng bộ như lựa chọn được thay đổi, nhưng tôi thích không sử dụng JavaScript trong một tình huống như thế này, nơi có khả năng sẽ gây nhầm lẫn. Chắc chắn có những cách khác để thực hiện điều này.
Câu hỏi của tôi là có tồn tại bất kỳ thực hành tiêu chuẩn nào để thực hiện việc này không? Hay tôi nên nghĩ ra cách làm như vậy? Tôi không muốn tái phát minh ra bánh xe nếu có thể, và điều này dường như rất phổ biến mà chỉ cần đánh cánh nó có thể không phải là cách tiếp cận tốt nhất.
Tôi đã sử dụng phương pháp này bằng cách đăng ký một binder tùy chỉnh trong bộ điều khiển để đi từ chuỗi đến đối tượng đại diện (đó là tập trung mã mà dwb gợi ý). – Nate