HSF302 - Phần 9: Ứng dụng CRUD với JavaFX
ObservableList là danh sách báo cho bảng mỗi khi có phần tử được thêm, xoá hay thay thế, nên TableView gắn với nó tự vẽ lại; riêng việc sửa một trường của đối tượng có sẵn chỉ hiện lên ngay khi trường đó là property của JavaFX, còn không thì phải thay phần tử trong danh sách hoặc gọi refresh(). Lớp controller của màn hình giữ danh sách đó, nhận sự kiện từ nút bấm và gọi xuống tầng xử lý nghiệp vụ. Một vòng thêm, sửa, xoá hoàn chỉnh gồm đọc dữ liệu từ ô nhập, kiểm tra hợp lệ, cập nhật danh sách và báo kết quả bằng hộp thoại Alert. Phần hiển thị dùng TableView, mỗi TableColumn lấy giá trị qua setCellValueFactory, chẳng hạn PropertyValueFactory đọc theo tên thuộc tính của lớp mô hình. Các thành phần nền như Stage, Scene và bố cục được trình bày ở Phần 8.
Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.
Luyện tập theo chủ đề này
Câu hỏi của chủ đề
em.persist(entity);em.remove(entity);em.find(Entity.class, id);em.merge(entity);Đáp án đúng: "em.merge(entity); ". Cập nhật một entity trong ứng dụng JavaFX thường diễn ra khi đối tượng đã được nạp từ trước, hiển thị trên form, người dùng sửa rồi bấm lưu; lúc đó entity đã ở trạng thái detached (tách khỏi persistence context) vì EntityManager cũ đã đóng, nên phải gọi merge trong một giao dịch: JPA chép trạng thái của nó vào bản managed có cùng khoá chính và khi commit sẽ sinh câu UPDATE. Chú ý merge trả về bản managed, còn đối tượng truyền vào vẫn detached. "em.persist(entity); " dùng cho entity mới, sinh INSERT và báo lỗi khi gặp entity detached. "em.remove(entity); " xoá entity, sinh DELETE. "em.find(Entity.class, id);"chỉ nạp entity theo khoá chính, là bước đọc chứ không ghi thay đổi; tuy entity vừa find rồi sửa trong cùng giao dịch cũng được cập nhật nhờ dirty checking, bản thân lệnh đó không thực hiện việc cập nhật.
LabelTextFieldTableViewButtonĐề có câu hỏi của chủ đề này
5 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.