Chìa khóa để nó tất cả điều này là PropertyEditor.
Bạn cần xác định PropertyEditor cho lớp Bữa sáng và sau đó định cấu hình ServletDataBinder bằng cách sử dụng registerCustomEditor trong phương pháp initBinder của bộ điều khiển.
dụ:
public class BreakfastPropertyEditor extends PropertyEditorSupport{
public void setAsText(String incomming){
Breakfast b = yourDao.findById(Integer.parseInt(incomming));
setValue(b);
}
public String getAsText(){
return ((Breakfast)getValue()).getId();
}
}
lưu ý bạn sẽ cần một số kiểm tra null vv, nhưng bạn sẽ có được ý tưởng. Trong điều khiển của bạn:
public BreakfastFooBarController extends SimpleFormController {
@Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
binder.registerCustomEditor(Breakfast.class, new BreakfastPropertyEditor(yourDao));
}
}
điều cần xem ra cho:
- PropertyEditor của không phải là thread an toàn
- nếu bạn cần đậu mùa xuân, hoặc bằng tay tiêm cho họ hoặc xác định chúng trong mùa xuân như phạm vi nguyên mẫu và sử dụng phương pháp tiêm vào bộ điều khiển của bạn
- ném IllegalArgumentException nếu tham số đến không hợp lệ/không tìm thấy, spring sẽ chuyển đổi lỗi này thành lỗi ràng buộc chính xác
hy vọng điều này sẽ hữu ích.
Chỉnh sửa (để trả lời nhận xét): Có vẻ hơi lạ trong ví dụ cụ thể vì BreakfastSelectCommand không giống như một thực thể, tôi không chắc bạn đang có kịch bản thực tế nào. Giả sử nó là một thực thể, ví dụ như Person
với thuộc tính breakfast
thì phương thức formBackingObject()
sẽ tải đối tượng Person từ PersonDao
và trả về nó làm lệnh. Giai đoạn ràng buộc sau đó sẽ thay đổi thuộc tính bữa sáng tùy thuộc vào giá trị đã chọn, sao cho lệnh đến trong onSubmit
có thuộc tính bữa sáng được thiết lập.
Tùy thuộc vào việc thực hiện các đối tượng DAO của bạn gọi hai lần hoặc cố tải cùng một thực thể hai lần không thực sự có nghĩa là bạn sẽ nhận được hai câu lệnh SQL đang chạy. Điều này áp dụng đặc biệt cho Hibernate, nơi nó đảm bảo rằng nó sẽ trả về cùng một đối tượng trong phiên làm việc của nó cho một định danh đã cho, do đó cho phép nỗ lực ràng buộc để nạp lựa chọn Breakfast
ngay cả khi nó không thay đổi. chi phí quá cao.
Nguồn
2009-02-08 10:19:44
Cảm ơn gid. Tại điểm ràng buộc, không phải đối tượng lệnh của tôi đã được tạo ra (lần thứ hai) chưa? Nó có vẻ lạ mà tôi cần phải thực hiện một yêu cầu của bạnDao. – morgancodes
@morgancodes xem ở trên chỉnh sửa ...cần thêm một chút không gian –
tất cả những thứ đó và không phải là duy nhất upvote ... –