Chủ đề của HSF302 - Làm việc với Spring Framework

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.

Xem danh sách câu hỏi7 câu hỏi100% có giải thích

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.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

7Câu hỏi hiện có

Câu hỏi của chủ đề

7/7 câuHết danh sách
AStage
BScene
CAlert
DPane
Lời giải
Đáp án đúng: "Alert". Lớp javafx.scene.control.Alert, kế thừa Dialog, tạo hộp thoại bật lên dựng sẵn với các loại AlertType như CONFIRMATION, ERROR, WARNING, INFORMATION; gọi showAndWait sẽ hiện hộp thoại và trả về nút người dùng bấm, rất hợp để xác nhận hoặc báo lỗi. "Stage" là cửa sổ cấp cao nhất của JavaFX; tự tạo một Stage mới cũng làm được cửa sổ phụ nhưng phải tự dựng toàn bộ nội dung và nút, không phải lớp chuyên cho hộp thoại thông báo. "Scene" là vùng chứa đồ thị cảnh (scene graph) đặt bên trong một Stage, không phải cửa sổ bật lên. "Pane" chỉ là layout chứa các node con, phải nằm trong một Scene, tự nó không hiển thị thành hộp thoại.
Mở trang câu hỏi này →
ATo improve database performance.
BTo ensure data integrity and prevent errors.
CTo enhance user interface aesthetics.
DTo manage server configurations.
Lời giải
Đáp án đúng: "To ensure data integrity and prevent errors.". Trong ứng dụng JavaFX có thao tác CRUD (tạo, đọc, cập nhật, xoá), kiểm tra hợp lệ (validation) là bước kiểm dữ liệu người dùng nhập trên form, chẳng hạn trường bắt buộc không rỗng, email đúng định dạng, số lượng là số dương, trước khi gọi tầng service để lưu; dữ liệu sai bị chặn và báo lỗi ngay trên giao diện, nhờ vậy cơ sở dữ liệu giữ được tính toàn vẹn và tránh ngoại lệ do vi phạm ràng buộc. "To improve database performance." sai vì kiểm tra hợp lệ không làm truy vấn nhanh hơn; hiệu năng phụ thuộc chỉ mục và thiết kế truy vấn. "To enhance user interface aesthetics." sai vì thông báo lỗi có hiện trên giao diện nhưng mục đích là đúng dữ liệu, không phải thẩm mỹ. "To manage server configurations." sai vì cấu hình máy chủ là việc triển khai, không liên quan tới kiểm dữ liệu nhập.
Mở trang câu hỏi này →
Aem.persist(entity);
Bem.remove(entity);
Cem.find(Entity.class, id);
Dem.merge(entity);
Lời giải

Đá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.

Mở trang câu hỏi này →
AIn the View layer.
BIn the Controller or Service layer.
CDirectly in the Entity class.
DInside the JavaFX Application class.
Lời giải
Đáp án đúng: "In the Controller or Service layer.". EntityManager là giao diện JPA thao tác với persistence context (ngữ cảnh lưu trữ), được tạo từ EntityManagerFactory; trong ứng dụng JavaFX không có Spring quản lý, nó thường được tạo và đóng ở tầng xử lý phía sau giao diện, mỗi thao tác hoặc mỗi giao dịch một EntityManager. Nói chặt chẽ thì thiết kế chuẩn đặt EntityManager ở tầng service hoặc DAO, còn controller JavaFX chỉ nên gọi service, nên việc gộp cả Controller vào đây hơi lỏng; dù vậy đây vẫn là lựa chọn duy nhất chỉ đúng vùng xử lý nghiệp vụ. "In the View layer." sai vì tầng giao diện chỉ hiển thị, đưa truy cập dữ liệu vào đó phá vỡ việc tách lớp. "Directly in the Entity class." sai vì entity là đối tượng được EntityManager quản lý, để nó tự giữ EntityManager là đảo ngược quan hệ. "Inside the JavaFX Application class." sai vì lớp Application lo vòng đời cửa sổ, đặt EntityManager ở đó là trộn giao diện với truy cập dữ liệu.
Mở trang câu hỏi này →
AHBox/VBox
BBorderPane
CGridPane
DStackPane
Lời giải
Đáp án đúng: "GridPane". GridPane xếp các Node theo lưới hàng và cột, mỗi phần tử đặt bằng add(node, cột, hàng), nên trong form CRUD có thể đặt nhãn ở cột trái, ô nhập ở cột phải, mọi hàng thẳng cột với nhau và hàng nút ở dưới cùng; đó là bố cục điển hình cho form nhập liệu. "HBox/VBox" là chỗ có thể tranh cãi: lồng VBox chứa nhiều HBox cũng dựng được một form đơn giản, nhưng mỗi HBox tính độ rộng riêng nên nhãn và ô nhập không tự thẳng hàng giữa các dòng, phải chỉnh tay, vì thế với form nhiều trường GridPane vẫn là lựa chọn tiêu biểu. "BorderPane" chia vùng thành top, bottom, left, right, center, hợp cho khung tổng thể của cửa sổ, và form thường được đặt vào vùng center của nó. "StackPane" xếp chồng các Node lên nhau, hợp cho lớp phủ hay căn giữa một phần tử, không hợp để xếp nhiều trường nhập.
Mở trang câu hỏi này →
ALabel
BTextField
CTableView
DButton
Lời giải
Đáp án đúng: "TableView". TableView là control của JavaFX hiển thị danh sách đối tượng dạng bảng: mỗi cột là một TableColumn gắn cellValueFactory, thường là PropertyValueFactory hoặc lambda trỏ tới thuộc tính của đối tượng, còn dữ liệu là một ObservableList nên khi danh sách thay đổi bảng tự cập nhật; nó hỗ trợ sắp xếp theo cột, chọn dòng và sửa ô, rất hợp để hiện kết quả truy vấn JPA. "Label" chỉ hiển thị một đoạn chữ hoặc biểu tượng tĩnh. "TextField" là ô nhập một dòng văn bản để người dùng gõ dữ liệu. "Button" là nút bấm phát sinh sự kiện ActionEvent khi được nhấn. Không control nào trong số này có cấu trúc hàng và cột để trình bày dữ liệu dạng bảng.
Mở trang câu hỏi này →
ALabel or Alert
BButton
CTableView
DTextField
Lời giải
Đáp án đúng: "Label or Alert". Thông báo lỗi validation cần được hiển thị cho người dùng đọc: Label đặt ngay cạnh hoặc dưới ô nhập, đổi chữ và màu đỏ bằng setText và setStyle, hợp để báo lỗi tại chỗ từng trường; còn Alert là hộp thoại kiểu AlertType.ERROR hay AlertType.WARNING bật lên bằng showAndWait, hợp để báo lỗi tổng hợp khi bấm lưu. "Button" là control để người dùng kích hoạt hành động, không dùng để trình bày thông báo. "TableView" hiển thị danh sách dữ liệu nhiều hàng nhiều cột, quá nặng và sai mục đích cho một câu báo lỗi. "TextField" là ô cho người dùng nhập liệu; nhét thông báo lỗi vào đó sẽ lẫn với dữ liệu người dùng gõ, dù có thể tô viền đỏ ô này để đánh dấu trường sai bên cạnh Label.
Mở trang câu hỏi này →

Đề 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.