Trong giao diện thành phần login, trưng nút Log In tên loginButton Tên nhằm vào nút Log In nằm biểu mẫu có tên form, giá trị thuộc tính targets là: form:loginButton Trình lắng nghe hành động kết hợp với nút Log In Liệt kê 16 thấy Liệt kê 17: Liệt kê 17 Trình nghe hành động nút Log in package com.clarity; import javax.faces.event.AbortProcessingException; import javax.faces.event.ActionEvent; import javax.faces.event.ActionListener; public class LoginActionListener implements ActionListener { public void processAction(ActionEvent e) throws AbortProcessingException { System.out.println("logging in "); } } Trình nghe hành động Liệt kê 17 dành cho mục đích minh họa — người sử dụng đăng nhập, đơn giản viết lại thông báo vào tệp log thùng chứa servlet Nhưng bạn hiểu ý tưởng: Với JSF 2, bạn triển khai thực thành phần cấu hình đầy đủ bạn gắn chức cho thành phần đó, tất mà khơng có dịng mã Java cấu hình XML Đó vài miếng võ mạnh (N.D: fu - tạm dịch miếng võ – tác giả mượn từ gốc tiếng Hán, dùng với nghĩa từ Kung Fu) Thành phần place (địa điểm): Lồng thành phần phức hợp vào JSF cho phép bạn thực thành phần cấu hình đầy đủ mà khơng có mã Java cấu hình Bạn lồng thành phần phức hợp vào nhau, cho phép bạn chia cắt thành phần phức hợp thành mảnh nhỏ hơn, dễ dùng Ví dụ, Hình cho thấy thành phần place, hiển thị đồ thông tin thời tiết địa cho: Hình Thành phần place ứng dụng địa điểm Liệt kê 18 cho thấy ứng dụng địa điểm sử dụng thành phần place nào: Liệt kê 18 Sử dụng thành phần place Mã cho thành phần place hiển thị Liệt kê 19: Liệt kê 19 Thành phần place Trong Liệt kê 19, thành phần place sử dụng hai thành phần lồng nhau: Liệt kê 20 cho thấy thành phần map (bản đồ): Liệt kê 20 Thành phần map #{msgs.zoomPrompt} Cấu trúc lại thành phần phức hợp Liệt kê 20 — tài liệu đánh dấu siêu văn thành phần map — dài chút theo vị Nhìn thống qua lần đầu, khó hiểu phức tạp gây vấn đề sau Bạn dễ dàng cấu trúc lại Liệt kê 20 thành nhiều tệp dễ quản lý hơn, làm tơi cấu trúc lại trình đơn bên trái khung nhìn địa điểm Liệt kê 8, 10 Trong trường hợp này, dành lại việc tái cấu trúc tập cho bạn Hãy ý việc sử dụng biểu thức #{cc.parent.attrs.location.ATTRIBUTE_NAME} Liệt kê 20 Bạn sử dụng thuộc tính parent (cha mẹ) thành phần phức hợp để truy cập thuộc tính thành phần cha mẹ, tạo thuận lợi lớn cho việc lồng thành phần Nhưng bạn khơng cần hồn tồn dựa vào thuộc tính cha mẹ thành phần lồng Như làm thành phần place Liệt kê 19, bạn vượt qua thuộc tính, chẳng hạn tiêu đề đồ, từ thành phần cha mẹ tới thành phần lồng nó, giống bạn vượt qua thuộc tính đến thành phần khác nào, có lồng hay khơng Nó có giảm chút, Liệt kê 21 cho thấy thành phần weather (thời tiết): Liệt kê 21 Thành phần weather Thành phần weather, giống thành phần map, sử dụng thuộc tính thành phần cha mẹ (weather HTML từ dịch vụ Web thời tiết) thuộc tính thành phần cụ thể (tiêu đề) (Xem Phần để thấy ứng dụng nhận đồ thông tin thời tiết với địa điểm cụ thể nào) Vì vậy, bạn thực thành phần lồng nhau, bạn có lựa chọn Bạn thành phần lồng dựa vào thuộc tính thành phần cha mẹ bạn yêu cầu thành phần cha mẹ chuyển qua thuộc tính rõ ràng đến thành phần lồng Ví dụ, thành phần place Liệt kê 19 rõ ràng vượt qua thuộc tính tiêu đề đến thành phần lồng nó, thành phần lồng dựa vào thuộc tính cha mẹ, chẳng hạn URL đồ (map URL) HTML thời tiết (weather HTML) Bạn chọn thực thuộc tính thành phần rõ ràng dựa vào thuộc tính cha mẹ thỏa hiệp việc kết nối tiện lợi Trong trường hợp này, thành phần map weather kết nối chặt chẽ với thành phần cha mẹ chúng (thành phần place), chúng dựa vào thuộc tính thành phần cha mẹ Tơi tách rời thành phần map weather khỏi thành phần place cách xác định tất thuộc tính thành phần map weather thuộc tính rõ ràng Nhưng trường hợp đó, tơi số tiện nghi, thành phần place rõ ràng cần phải vượt qua tất thuộc tính đến thành phần map weather Tiếp theo Trong này, cho bạn thấy cách sử dụng JSF UIS để triển khai thực UI dễ dàng để trì mở rộng thơng qua việc tạo khuôn mẫu thành phần phức hợp Bài cuối loạt cho bạn cách sử dụng JavaScript thành phần phức hợp, làm để sử dụng mơ hình kiện JSF làm để tận dụng lợi hỗ trợ có sẵn JSF cho Ajax Mục lục Lời khuyên 1: Giữ nguyên tắc DRY Lời khuyên 2: Hãy dùng cách hợp thành Lời khuyên 3: Hãy nghĩ theo kiểu LEGO Tiếp theo ... đơn giản để triển khai thực thành phần phức hợp Các thành phần phức hợp, tên gọi cho thấy, cho phép bạn hợp thành thành phần từ thành phần có Bạn thực thành phần phức hợp XHTML nơi thư mục tài... mẹ) thành phần phức hợp để truy cập thuộc tính thành phần cha mẹ, tạo thuận lợi lớn cho việc lồng thành phần Nhưng bạn khơng cần hồn tồn dựa vào thuộc tính cha mẹ thành phần lồng Như làm thành phần. .. trường hợp này, thành phần map weather kết nối chặt chẽ với thành phần cha mẹ chúng (thành phần place), chúng dựa vào thuộc tính thành phần cha mẹ Tơi tách rời thành phần map weather khỏi thành phần