Phát triển công cụ hỗ trợ biên dịch và kiểm thử trên hệ thống sakai
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HOC VÀ KỸ THUẬT MÁY TÍNH BỘ MƠN KHOA HỌC MÁY TÍNH ………… o0o………… LUẬN VĂN TỐT NGHIỆP PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI Hội đồng: KHOA HỌC MÁY TÍNH GVHD: TS Nguyễn Hứa Phùng KS Phan Nhật Thịnh GVPB: PGS Phan Thị Tươi SVTH: Phan Văn Hịa Lê Minh Hải Tp Hồ Chí Minh, Tháng 6/2011 LỜI CAM ĐOAN 50600822 50600600 PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI Chúng cam đoan rằng: ngoại trừ kết tham khảo từ cơng trình khác ghi rõ phần tài liệu tham khảo luận văn, nội dung cơng việc trình bày luận văn kết thu chúng tơi thực chưa có phần nội dung luận văn sử dụng để lấy cấp trường trường khác TP HỒ CHÍ MINH, THÁNG 6/2011 PHAN VĂN HÒA LÊ MINH HẢI 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI LỜI CẢM ƠN Chúng xin chân thành cảm ơn thầy Nguyễn Hứa Phùng thầy Phan Nhật Thịnh, giáo viên hướng dẫn đề tài luận văn chúng tôi, thầy tận tình hướng dẫn, bảo chúng tơi suốt thời gian thực đề tài giai đoạn đồ án môn học làm tiền đề cho đề tài luận văn Xin chân thành biết ơn tận tình dạy dỗ truyền đạt kiến thức tất quý thầy cô trường Đại học Bách Khoa, đặc biệt thầy cô khoa Khoa học Kỹ thuật máy tính Cuối cùng, xin gửi lời cảm ơn chân thành đến gia đình, bạn bè, người sát cánh, động viên, giúp đỡ suốt trình thực đề tài TP HỒ CHÍ MINH, THÁNG 6/2011 PHAN VĂN HỊA LÊ MINH HẢI 6/2011 Trang SVTH: Phan Văn Hòa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI TÓM TẮT LUẬN VĂN Quyển luận văn gồm chương với nội dung cụ thể sau Chương 1: GIỚI THIỆU ĐỀ TÀI Yêu cầu doanh nghiệp sinh viên dẫn đến yêu cầu thực hành sinh viên trình học gia tăng Sự phát triển đào tạo điện tử dẫn đến việc sử dụng hệ thống Sakai Tuy nhiên, công cụ SAKAI chưa hỗ trợ thực hành với yêu cầu đặc trưng việc biên dịch kiểm thử ngành Từ dẫn đến yêu đề tài phát triển công cụ hỗ trợ biên dịch kiểm thử hệ thống SAKAI Chương 2: CÁC KIẾN THỨC LIÊN QUAN Giới thiệu kiến thức liên quan trình tìm hiểu thực nội dung luận văn Chương 3: PHÂN TÍCH U CẦU Phân tích yêu cầu công cụ Chương 4: THIẾT KẾ CÔNG CỤ CSLAB TRÊN DỰ ÁN SAKAI Thiết kế hoạt động, giao diện công cụ Chương 5: HIỆN THỰC CƠNG CỤ CSLAB Trình bày cách thực thiết kế, mô tả mã nguồn Chương 6: KIỂM TRA HIỆU SUẤT HOẠT ĐỘNG CỦA TEST SERVER Xác định khả tải giải pháp có nhiều kết nối thực Chương 7: TRIỂN KHAI CÔNG CỤ CSLAB Cài đặt công cụ vào hệ thống SAKAI Chương 8: TỔNG KẾT Tổng kết kết đạt được, hạn chế luận văn hướng phát triển cơng cụ 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI MỤC LỤC MỤC LỤC HÌNH 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI CHƯƠNG I CÁC KIẾN THỨC LIÊN QUAN I.1 SSH JAVA a Giao thức SSH: SSH hay Secure Shell giao thức mạng dùng để trao đổi thông tin hai thiết bị kên truyền bảo mật, thường sử dụng hệ thống Linux hay hệ thống Unix-based để đăng nhập tài khoản từ xa Cách thức làm việc SSH bao gồm bước là: • xác định máy chủ thơng qua việc trao đổi khóa • xác lập phiên làm việc bảo mật mã hóa từ khóa đồng trao đổi bước • chứng thực người dùng SSH thiết kế để thay cho giao thức Telnet hay giao thức đăng nhập tài khoản từ xa không bảo mật khác, mà password user data gửi dạng plain-text bị bắt chương trình bắt gói thơng tin mạng 2.1-1-Mơ hình giao thức SSH SSH sử dụng chế mã hóa Public-key Authentication để chứng thực người dùng SSH thực thi tính đăng nhập tài khoản từ xa, thực thi command đồng thời hỗ trợ việc gửi / nhận tập tin qua giao thức SCP hay 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI SFTP Ngồi SSH cịn hỗ trợ giao thức khác Tunneling, Port Forwarding, X11 Cổng mặc định giao thức SSH 22 Phiên nhật SSH phiên nâng cao tính bảo mật (ví dụ: sử dụng chế trao đổi khóa Diffie – Hellman, message authentication code để kiểm tra tính tồn vẹn ) hay thêm số chức (chạy nhiều shell kết nối SSH …) b JSCH: thư viện SSH Java JSch thư viện Java thực việc kết nối đến máy chủ SHH sử dụng giao thức SSH-2, phát hành với giấu phép BSD-type Hỗ trợ giao thức SSH-2 với khả đăng nhập shell hay thực thi câu lệnh từ xa Hỗ trợ việc chứng thực user phương pháp Authentication hay Publickey Hỗ trợ tính gửi / nhận tập tin qua giao thức SCP Hỗ trợ giao thức X11Port Forwarding Phụ thuộc vào gói Java Cryptography Extension (JCE) – gói thư viện mã hóa chuẩn Java I.2 Giao thức HTTP Trước tìm hiểu cơng nghệ lập trình mức cao hơn, hiểu phương thức mà web browser và webserver trao đổi đem lại lợi ích ta tương tác với đối tượng request/response giúp ích việc debug có lỗi xảy HTTP viết tắt Hyper-Text Transport Protocol, phương thức giao kiểu yêu cầu-đáp ứng(request-response) Trong tình phổ biến máy khách(client) mở kết nối đến máy chủ(server) gửi HTTP request cho tài nguyên(resource) đó, máy chủ trả lời với HTTP response Sau nhận response từ máy chủ, máy khách đóng kết nối tạo Phương thức sau lần trao đổi yêu cầu-đáp ứng, máy chủ hồn tồn khơng nhớ khách nên gọi khơng trạng thái(stateless) Đứng góc nhìn máy chủ yêu cầu từ máy khách yêu cầu 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI 2.2-2-Mô hình giao thức HTTP Thường gói tin HTTP có phần: • Phần mở đầu: Chỉ định gói u cầu(request) hay đáp ứng(response) • Phần đầu đề(header): Chỉ định số thông tin độ lớn, kểu, mã kí tự nội dung gói tin • Một hàng trống • Phần thân (nếu có) u cầu HTTP: • Một gói tin HTTP từ máy khách đến máy chủ gọi yêu cầu HTTP Phần đầu yêu cầu HTTP bao gồm phương thức(method), tên tài nguyên (URI), phiên HTTP Thí dụ: GET /MyWebApp/index.html HTTP/1.1 • Ở phần phương thức gồm có GET,POST,HEAD,PUT.Thơng thường ta quan tâm đến GET POST • Trong u cầu HTTP GET, thơng tin từ phía máy khách gắn vào URL: http://SomeHost/WebApp/home? name=PVH&pass=50600822 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI 2.2-3-HTTP Header với phương thức GET • Nói cách khác thơng tin từ phía khách đính kèm URL Điều có khuyết điểm: thứ độ dài giới hạn URL, thứ hai URL thường trình duyệt ghi nhớ thơng tin nhạy cảm khơng đảm bảo GET thường dùng để yêu cầu tài nguyên tĩnh, hình ảnh, HTML file nhỏ • Trong Một yêu cầu HTTP POST thơng tin từ phía máy khách đính kèm phần thân gói HTTP POST khắc phục nhược điểm để lộ thông tin URL hạn chế độ dài thông tin cần truyền tải Nếu bạn muốn gửi tập tin lên máy chủ(upload) bạn phải sử dụng phương thức POST 2.2-4-HTTP Header với phương thức POST Đáp ứng HTTP: • Một điều ta cần lưu ý HTTP stateless nghĩa la trình request/response khơng nhớ HTTP server Nếu browser bạn gửi liên tiếp nhiều request đến server, server xem request la độc lập, liên hệ với • Một cách tạo mối lien hệ request sử dụng Cookies Khi server nhận request từ browser, server trả lời response đặt vào header đặt biệt gọi cookie Nếu Broswer có hỗ trợ cookies, lưu cookie tìm header gửi kèm với request từ sau đó.Server dựa vào để liên hệ request với mà ta gọi session Tuy nhiên Server hồn tồn khơng địi hỏi việc browser gửi kèm cookie mà nhận, việc sử dụng cookie server cung cấp hoàn toàn phụ thuộc vào browser 6/2011 Trang SVTH: Phan Văn Hòa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI 2.2-5-HTTP Request – Response (1) • Các request từ browser sau gửi kèm cookie(do server gửi ) header 2.2-6-HTTP Request – Response (2) 6/2011 Trang 10 SVTH: Phan Văn Hịa Lê Minh Hải • Login vào Sakai, lần bạn khơng điền vào Form bấm nút “Click Me!” • Hoặc bạn điền nhập liệu: • cịn có thơng số khác màu sắc cho cấp độ nghiêm trọng thông tin, mức độ chi tiết • Ngồi với (có ‘s’ cuối) bạn không cần khai báo thông số “id” ô nhập liệu, tất nội dung lỗi từ ô nhập liệu tập trung in Các thơng số cịn lại tương tự • Lưu ý bạn, theo dịng đời JSF khâu kiểm tra báo lỗi xảy trước xử lí kiện(xem lại phần JSF life cycle), tức ví dụ hàm goManga hồn tồn khơng gọi chạy Sau biểu mẫu gửi lên máy chủ khâu kiểm tra liệu phát lỗi trả cho người sử dụng trang với thơng báo lỗi, hồn toàn chưa đả động đến kiện cài đặt sau • Chức kiểm tra tích hợp vịng đời JSF tiện lợi, đặt tình huống, form mua hàng form có thơng tin số thẻ, địa chỉ, điện thoại … hai nút bấm Next, Cancel trường hợp ô thông tin khai báo “required=true” lúc bạn bấm Cancel bạn không trả trang chủ mà liên tục bị quay lại báo lỗi, buộc bạn nhập thông tin Chính lí các phần tử h:commandLink, h:commandButton có thơng số immediate, bạn cho immediate=true, lúc bạn ấn nút pha kiểm tra loại bỏ tiến thẳng đến xử lí kiện ,xử lí chuyển trang Vịng đời JSF Tôi sinh viên ham hố, thử “rờ” đến công nghệ khác Đã ứng dụng mạng khơng thể không thử ASP.net Trong thời gian dài cảm thấy bất cơng, Asp.net có toolbox với đủ ăn chơi, trang mạng hồnh tráng với phần tử giao diện đẹp nhiều chức xây dựng vài phút Thử hỏi ASP.net kéo thả bảng database vào trang mạng( mã nguồn tự động tạo phần tử dataGrid) JSP tơi phải tạo model tương thích với bản, dùng JDBC lấy bảng lên cất mảng phần tử từ từ in trang mạng • Vậy tơi phải sử dụng J2EE? Có lẽ cộng đồng java nhận thấy điều này, JSF đời cố gắng đem đến cân lực lượng dataTable điển hình cải tiến J2EE • Với dataTable bạn tạo giao diện dạng bảng cho danh sách số kiểu tập hợp • Tạo package org.sakaiproject.mt06bk01.model, tạo Class Student: package org.sakaiproject.mt06bk01.tool.model; public class Student { String fullName; String stuID; String email; double averageScore; public Student() { } public Student(String fullName, String stuID, String email, double averageScore) { super(); this.fullName = fullName; this.stuID = stuID; this.email = email; this.averageScore = averageScore; } //GETTER AND SETTER • Chú ý code thiếu getter setter, bạn phải tạo đủ getter/setter cho thuộc tính • Sửa mã nguồn PVHoa.java thành package org.sakaiproject.mt06bk01.tool.beans; import java.util.ArrayList; import java.util.List; import org.sakaiproject.mt06bk01.tool.model.Student; public class PVHoa { List stuList; public PVHoa(){ stuList = new ArrayList(); Student temp; temp = new Student("PhanVanHoa", "50600822", "behaibeo@yahoo.com", 6.99); stuList.add(temp); temp = new Student("LeMinhHai", "50600600", "leminhai@gmail.com", 7.28); stuList.add(temp); temp = new Student("SuperMan", "50699999", "superman@gmail.com", 9.99); stuList.add(temp); temp = new Student("Medivh", "50688888", "Guardian@gmail.com", 9.99); stuList.add(temp); } public List getStuList() { return stuList; } public void setStuList(List stuList) { this.stuList = stuList; } } • Sửa trang HelloWorld.jsp thành • Value List (Array,ArrayList,ResultSet…), lưu ý phải có get/set PVHoa.java • Var biến tạm để bạn truy suất thuộc tính phần tử trung danh sách.Trong thân dataTable bạn dùng biểu thức #{biến_tạm.thuộc_tính} để truy suất giá trị, lưu ý thuộc tính phải có hàm get/set chuẩn Mỗi mục đại diện cho cột • Khá tiện lợi, ví dụ tơi dùng java.util.List đằng sau value dataTable ngồi bạn dùng: i java.sql.ResultSet ii javax.servlet.jsp.jstl.sql.Result iii javax.faces.model.DataModel • dataTable có thuộc tính rowClasses Coulumnclasses, thí dụ ta muốn hai hang liên tiếp có màu sắc khác nhau, ta khai báo hai css Style đặt tên chẵn lẻ: #FFFFFF màu trắng #3300FF mã hexa màu sắc, lần lược trắng xanh.Bạn tham khảo giá trị hex màu http://html-colorcodes.com/ • Kết : • Đối với ColumClasses bạn sử dụng tương tự Đa số phần tử JSF có thông số gọi facet(tôi dịch gì) Nó chức phụ cho phần tử bạn, dataTable bạn dùng facet để khai báo header cho cột sau: • Kết • Bạn khai báo header cho Table cách tương tự • Đơi bạn khơng muốn sử dụng bảng để trình diễn liệu mà cịn dùng để kích hoạt số kiện, nhu cầu đáng phổ biến Bạn dùng javascript loại kịch với form ẩn để thực chức này, cách phổ biến lập trình JSP PHP Tuy nhiên JSF cho phép bạn biết phần tử kích hoạt kiện, bạn nhớ JSF ghi nhớ trang bạn dạng mà gốc , bạn có phần tử kích hoạt kiện, bạn lấy giá trị phần tử ngược lên chọn phần tử cha, ơng … Tơi trình bày kĩ thuật xử lí kiện phổ biến dataTable • • Sửa mã nguồn HelloWorld.jsp sau: Thay đổi nội dung PVHoa.java: thêm thuộc tính i String thongbao: dùng để in thông báo cho biết kiện xảy thành công ii HTMLdataTable danhsachSV: dùng để gắn với phần tử bảng giao diện thông qua thuộc tính binding hình Thực tế khơng dataTable mà tất component có lớp tương ứng, bạn tạo đối tượng gắn với phần tử giao diện dựa vào event để thêm, xóa, sửa thuộc tính giao diện Điều điểm mạnh JSF, bạn lập trình ứng dụng mạng mà khơng khác lập trình với Swing iii tất thuộc tính phải có getter setter tương ứng! • Thay đổi nội dung PVHoa.java: thêm hàm kiện: i Public String chonSV() : hàm chạy người sử dụng bấm vào link bảng liệu, nội dung thay đổi biến “thongbao” sau quay lại trang Việc trả chuỗi có giá trị “Sasuke” navigation-case facesconfig ta định outcome cho phép chuyển đến HelloWorld.jsp package org.sakaiproject.mt06bk01.tool.beans; import java.util.ArrayList; import java.util.List; import javax.faces.component.html.HtmlDataTable; import org.sakaiproject.mt06bk01.tool.model.Student; public class PVHoa { List stuList; String thongbao; HtmlDataTable danhsachSV; public PVHoa(){ thongbao ="hay lua chon mot sinh vien"; stuList = new ArrayList(); Student temp; temp = new Student("PhanVanHoa", "50600822", "behaibeo@yahoo.com", 6.99); stuList.add(temp); temp = new Student("LeMinhHai", "50600600", "leminhai@gmail.com", 7.28); stuList.add(temp); temp = new Student("SuperMan", "50699999", "superman@gmail.com", 9.99); stuList.add(temp); temp = new Student("Medivh", "50688888", "Guardian@gmail.com", 9.99); stuList.add(temp); } public String chonSV(){ Student temp = (Student) danhsachSV.getRowData(); thongbao = "ban da chon sinh vien "+temp.getFullName(); return "Sasuke"; • Đương nhiên thực tế bạn làm nhiều in thông báo, thí dụ delete hàng Khi lấy đối tượng tương ứng với hang bảng liệu bạn xử lí tùy thích Để ý biến danhsachSV thuộc lớp javax.faces.components.html.HtmlDatatable • Nếu bạn sử dụng org.apache.components.html.ext chương trình compiled deploy chạy sinh lỗi khơng tương thích Lớp apache phiên khác dataTable nằm taglib tomahawk myfaces, tức phần tử bảng giao diện không h:dataTable mà t:dataTable dTrong hệ thống Sakai có thư viện component mở rơng cho JSF, có phần tử lịch chọn ngày, nhập văn với format, tải tập tin … : Tải file lên Server chức lập trình ứng dụng mạng Sau cách thực chức sử dụng phần tử sakai:inputFileUpload Trên trang JSP sử dụng mã nguồn sau: • Chú ý h:form phải khai báo enctype=”multipart/form-data” nội dung submit text là binary, filter lọc xử lí form này(bạn xem filter web.xml thích) • Ở xuất valueChangeListener, bạn gắn vào phương thức, phương thức gọi trước hàm gắn action h:commandLink • Phương thức upDe() lấy Stream sakai:inpuFileUpload cung cấp bạn dùng Stream để truy suất nội dung tập tin tải ghi tập tin xuống • Sau ghi tập tin xuống đĩa cứng phương thức xong() kích hoạt để định việc chuyển trang, xong() đơn giản trả chuỗi cố định, thí dụ : public String xong(){ return "Sasuke"; } • Nội dung phương thức upDe(): { public void upDe(ValueChangeEvent event) throws AbortProcessingException try { FileItem item = (FileItem) event.getNewValue(); String fileName = item.getName(); byte[] fileContents = item.get(); String absPath = “D:/lvtn/HoaBeo/”; File parent = new File(absPath); if(!parent.exists()) parent.mkdirs(); FileOutputStream fos = new FileOutputStream( absPath + fileName); fos.write(fileContents); fos.close(); } catch (Exception ex) { thongbao = ex.toString(); } } • Item đối tượng thuộc lớp: org.apache.commons.fileupload.FileItem dùng để “hứng” kết xứ lí tập tin từ phần tử sakai:inputUploadFile • Sau lấy tham khảo đến FileItem, lấy tên tập tin cần lưu • Chuyển nội dung tập tin thành chuỗi byte[] (lẽ phải đọc mảng byte nhỏ phù hợp để tránh chiếm dụng nhớ) Tạo đường dẫn tuyệt đối đến thư mục cần lưu Tạo thư mục cha không tồn tại, sau mở luồng ghi tập tin, ghi tập tin đóng luồng Bạn thấy phần Catch để thôngbáo=ex.ToString(), nhớ lại lúc bean tơi có biến gọi thơngbáo in giao diện, cách mà debug nhanh, có lỗi xảy in trang web, đắn bạn nên sử dụng log4J cho việc ghi lỗi • Ngồi bạn dễ dàng sử dụng thuộc tính dir để định thẳng vị trí ghi tập tin, tên tập tin giữ nguyên Nếu tập tin tồn bị ghi đè Cách sử dụng bạn khơng biết xử lí luồng đọc/ghi bù lại bạn số quyền kiểm soát tập tin q trình xử lí ghi, đơi bạn muốn trích xuất thơng tin từ tập tin lưu tập tin tên khác kiểm tra nội dung tập tin Lúc tìm hiểu JSF, nhóm bạn khác làm đề tài Sakai than phiền khơng có cách để in danh sách theo chiều ngang dataTable phần tử hỗ trợ duyệt danh sách in theo hàng Thật giải thích, làm việc với JSF tương tự làm việc với Swing, bạn điều chỉnh giao diện cách linh động tùy thích.Có nhiều cách để bạn in danh sách động theo chiều ngang Ơ tơi xin trình bày cách ngắn dễ dùng phần tử thư viện tomahawk Sử dụng lại đối tượng danhsachSV trên, bạn sử nội dung trang HelloWorld.jsp sau: Ở thêm khai báo sử dụng thư viện tomahawk đầu trang với tiếp đầu ngữ Bên sử dụng thay cho , dataList có chức in danh sách dạng HTML list Đối với danh sách HTML mặc định phần tử chiếm hàng, kết in giao diện khơng khác so với sử dụng dataTable, nhiên tơi khai bái thuộc tính style cho danh sách display: inline thuộc tính CSS định phần tử danh sách in hàng Thay đổi mã nguồn backing bean cho phù hợp với trang JSP, mã nguồn backing bean lược bỏ metho get/set(khi sử dụng bạn phải đảm bảo đầy đủ hàm get/set cho thuộc tính bean): package org.sakaiproject.mt06bk01.tool.beans; import java.util.ArrayList; import java.util.List; import org.apache.myfaces.custom.datalist.*; import org.sakaiproject.mt06bk01.tool.model.Student; public class PVHoa { List stuList; String thongbao; HtmlDataList ds; public PVHoa(){ thongbao ="hay lua chon mot sinh vien"; stuList = new ArrayList(); Student temp; temp = new Student("PhanVanHoa", "50600822", "behaibeo@yahoo.com", 6.99); stuList.add(temp); temp = new Student("LeMinhHai", "50600600", "leminhai@gmail.com", 7.28); stuList.add(temp); temp = new Student("SuperMan", "50699999", "superman@gmail.com", 9.99); stuList.add(temp); temp = new Student("Medivh", "50688888", "Guardian@gmail.com", 9.99); } stuList.add(temp); public String selectSV(){ Student temp = (Student) ds.getRowData(); thongbao = "ban da chon sinh vien "+ temp.getFullName() + temp.getStuID() + temp.getAverageScore(); return "Sasuke"; } Ở bạn thấy sử dụng HtmlDataList để gắn kết với phần tử giao diện để phục vụ cho việc xử lí kiện tương ứng với phần tử danh sách Để biết lớp tương thích phục vụ cho việc gắn kết bạn phải xem trang : http://myfaces.apache.org/tomahawk-project/tomahawk/tagdoc.html ... TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI MỤC LỤC MỤC LỤC HÌNH 6/2011 Trang SVTH: Phan Văn Hịa Lê Minh Hải PHÁT TRIỂN CƠNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI. .. Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI 4.3-28-Vòng đời đối tượng 6/2011 Trang 43 SVTH: Phan Văn Hòa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN... đồ hoạt động hệ thống? ??: 6/2011 Trang 39 SVTH: Phan Văn Hòa Lê Minh Hải PHÁT TRIỂN CÔNG CỤ HỖ TRỢ BIÊN DỊCH VÀ KIỂM THỬ TRÊN HỆ THỐNG SAKAI 4.3-27-Lược đồ hoạt động hệ thống b Công cụ CSLab lưu