Siêu thị PDFTải ngay đi em, trời tối mất

Thư viện tri thức trực tuyến

Kho tài liệu với 50,000+ tài liệu học thuật

© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Khởi đầu với JavaServer Faces 1.2, Phần 1: Xây dựng các ứng dụng cơ bản Richard Hightower, Giám đốc
PREMIUM
Số trang
81
Kích thước
791.6 KB
Định dạng
PDF
Lượt xem
790

Khởi đầu với JavaServer Faces 1.2, Phần 1: Xây dựng các ứng dụng cơ bản Richard Hightower, Giám đốc

Nội dung xem thử

Mô tả chi tiết

Khởi đầu với JavaServer Faces 1.2, Phần 1: Xây dựng các ứng dụng cơ bản

Richard Hightower, Giám đốc công nghệ, ArcMind

Tóm tắt: Công nghệ Java™Server Faces (JSF), một khung công tác phía máy chủ

cung cấp một cách tiếp cận dựa vào thành phần để việc phát triển giao diện người

dùng web, đã có từ lâu. JSF 1.2 (kết hợp chặt chẽ trong Java Enterprise Edition 5)

đã sửa chữa một số điểm phiền hà của JSF và thêm vào một số tính năng tốt đẹp.

Loạt bài hướng dẫn này trình bày cách bắt đầu với JSF 1.2 như thế nào. Nó nặng

về các ví dụ và nhẹ về lý thuyết — đúng những gì bạn cần để bắt đầu nhanh

chóng.

Trước khi bạn bắt đầu

Giới thiệu về loạt bài này

Loạt bài hướng dẫn này nói về bước khởi đầu với công nghệ JavaServer Faces

(JSF), một khung công tác thành phần giao diện người dùng phía máy chủ cho các

ứng dụng web dựa trên Java. Loạt bài này dành cho các nhà phát triển, những

người mới bắt đầu tìm hiểu JSF và muốn tiến nhanh — không chỉ với JSF, mà với

cả việc sử dụng các thành phần JSF để giảm công sức. Loạt bài này trình bày chỉ

những điều cốt yếu, với rất nhiều ví dụ.

JSF là một môi trường phát triển GUI khá truyền thống, giống như AWT, SWT,

và Swing. Một trong những lợi ích chính của nó là nó làm cho việc phát triển Web

dễ dàng hơn bằng cách giao những công việc khó khăn cho các nhà phát triển

khung công tác, chứ không phải cho các nhà phát triển ứng dụng. Cứ cho là bản

thân JSF phức tạp hơn nhiều so với các khung công tác Web khác, nhưng sự phức

tạp này được che giấu không để cho các nhà phát triển ứng dụng biết. Phát triển

các ứng dụng Web trong JSF dễ dàng hơn nhiều so với hầu hết các khung công tác

khác: nó đòi hỏi viết mã ít hơn, ít phức tạp hơn, và ít việc cấu hình hơn.

Nếu bạn đang thực hiện phát triển Java phía máy chủ, JSF là khung công tác dễ

nhất để tìm hiểu. Nó được định hướng để tạo các ứng dụng Web (không chỉ là các

trang web). Nó cho phép bạn tập trung vào việc mã hóa Java của bạn mà không

cần đối phó với các đối tượng yêu cầu, các đối tượng phiên, các thông số yêu cầu,

hoặc đối phó với các tệp tin XML phức tạp. Với JSF, nhiều thứ thực hiện nhanh

hơn so với các khung công tác Web Java khác.

Về hướng dẫn này

Hướng dẫn này đi theo một cách tiếp cận cơ bản để phát triển JSF. Bạn sẽ không

sử dụng các công cụ màu mè hay sự hỗ trợ IDE trong hướng dẫn này (mặc dù sự

hỗ trợ sử dụng công cụ là ích lợi chính của JSF). Bạn sẽ thực hiện lập trình bằng

tay không! Tôi đề cập những điểm cốt yếu, với lý thuyết vừa đủ để tiếp tục duy trì

việc trình bày và để cho bạn học tập một cách hiệu quả việc sử dụng JSF để xây

dựng các ứng dụng Web. Bạn có thể ngạc nhiên khi biết rằng JSF lập trình dễ

dàng hơn so với khung công tác Web Java khác, thậm chí không có các công cụ

IDE ưa thích.

Các mục tiêu

Trong hướng dẫn này, bạn nhận được một tổng quan về các tính năng của JSF và

tìm hiểu cách làm thế nào để viết một ứng dụng JSF cơ bản. Bạn xây dựng một

ứng dụng máy tính bỏ túi đơn giản và, tuần tự nhiều lần, cải thiện vẻ ngoài và cảm

nhận của nó, sửa đổi cấu trúc của nó để bổ sung thêm nội xạ phụ thuộc và thực

hiện cơ chế dẫn hướng của JSF. Trong Phần 2, bạn sẽ xây dựng các trình biến đổi

(converter), các bộ duyệt tính hợp lệ, và trình nghe pha (phase-listener) theo yêu

cầu.

Ai nên tìm hiểu hướng dẫn này?

Nếu bạn là người mới bắt đầu tìm hiểu JSF, hướng dẫn này để dành cho bạn. Ngay

cả khi bạn đã sử dụng JSF nhưng chưa thử nghiệm các tính năng JSF 1.2 hoặc chỉ

sử dụng các công cụ GUI để xây dựng các ứng dụng JSF, bạn sẽ có khả năng học

hỏi được rất nhiều từ cả hai hướng dẫn trong loạt bài này.

Các điều kiện cần trước

Hướng dẫn này được viết cho các nhà phát triển Java với kinh nghiệm ở mức bắt

đầu tới mức trung cấp. Bạn cần phải có hiểu biết chung về cách sử dụng ngôn ngữ

Java, cùng với một số kinh nghiệm phát triển GUI.

Các yêu cầu hệ thống

Để chạy các ví dụ trong hướng dẫn này, bạn cần có một môi trường phát triển Java

(JDK) và Maven Apache. Nó giúp để có một IDE Java. Các tệp tin dự án Maven

và các tệp tin dự án trong Eclipse Java EE và Web Tools Project (WTP) được

cung cấp sẵn. Xem Tải về để nhận được mã ví dụ.

JSF dành cho những người mới bắt đầu

Giống như Swing và AWT, JSF là một khung công tác phát triển cung cấp một bộ

các thành phần GUI tiêu chuẩn, có thể dùng lại được, JSF được dùng để xây dựng

các giao diện ứng dụng Web. JSF cung cấp các lợi thế phát triển sau:

 Tách biệt hoàn toàn giữa hành vi và cách trình bày

 Kiểm soát tính có trạng thái (statefulness) ở mức thành phần

 Các sự kiện dễ dàng được liên kết với mã phía máy chủ

 Sử dụng các khái niệm thành phần UI và tầng Web (Web-tier) quen thuộc

 Cung cấp nhiều dụng cụ của nhà sản xuất phần mềm đã tiêu chuẩn hóa

 Sự hỗ trợ IDE tuyệt vời

Một ứng dụng JSF điển hình bao gồm các phần sau đây:

 JavaBeans để quản lý trạng thái và hành vi của ứng dụng

 Các thành phần GUI có trạng thái

 Phát triển hướng sự kiện (thông qua các trình nghe-listener) giống như

trong phát triển GUI truyền thống

 Các trang biểu diễn các khung nhìn theo phong cách Model-View￾Controller (MVC); các trang web tham khảo các gốc khung nhìn (view

roots) thông qua cây thành phần JSF

Bạn sẽ cần phải có khả năng để vượt qua một số các chướng ngại thuộc về khái

niệm để sử dụng JSF, nhưng làm như vậy cũng đáng công cố gắng. Việc quản lý

trạng thái thành phần của JSF; việc duyệt tính hợp lệ của dữ liệu đầu vào của

người dùng dễ sử dụng; xử lý sự kiện mức chi tiết, dựa trên thành phần; và kiến

trúc mở rộng dễ dàng; tất cả những cái đó sẽ làm đơn giản đáng kể công sức phát

triển web của bạn. Phần này giải thích những tính năng quan trọng nhất trong số

này một cách chi tiết.

Một kiến trúc dựa trên-thành phần

Hãy nghĩ theo cách của các thành phần có trạng thái

Chướng ngại lớn nhất mà bạn có thể gặp phải là bạn đã quên rằng JSF là một mô

hình thành phần có trạng thái. Nếu bạn đã sử dụng Struts từ trước, hãy lặp lại theo

tôi câu này: "JSF không phải là Struts. JSF không phải là Struts". Tôi đã thấy

những người có một nền tảng về GUI của Swing, AWT, Visual Basic, hay Delphi

học JSF nhanh hơn nhiều so với những người đã sử dụng Struts nhiều năm, và

chưa bao giờ thực hiện phát triển thành phần GUI trước đó. Hướng dẫn này được

thiết kế để giúp bạn nghĩ theo cách của các thành phần có trạng thái.

JSF cung cấp các thẻ thành phần cho tất cả các trường đầu vào có sẵn trong

HTML tiêu chuẩn. Bạn cũng có thể viết các thành phần tuỳ biến riêng của bạn cho

các mục đích riêng cho ứng dụng hoặc tổ hợp nhiều thành phần HTML để tạo

thành một phức hợp — ví dụ, một thành phần trình chọn ngày tháng (Data Picker)

có chứa ba danh sách chọn thả xuống. Các thành phần JSF có trạng thái. Tính có

trạng thái của chúng do các khung công tác JSF cung cấp. JSF sử dụng các thành

phần để sinh ra đáp ứng HTML. Nhiều thành phần GUI JSF của bên thứ ba cũng

có sẵn.

JSF bao gồm:

 Một mô hình sự kiện-xuất bản

 Một bộ chứa (container) nhẹ, đảo ngược-điều khiển (IoC)

 Các thành phần cho hầu hết mọi đặc tính GUI phổ biến khác, bao gồm

(nhưng không hạn chế):

o Công cụ biểu hiện (rendering) cắm chạy được

o Trình duyệt tính hợp lệ phía máy chủ

o Biến đổi dữ liệu

o Quản lý dẫn hướng trang

Là một kiến trúc dựa trên thành phần, JSF có khả năng cấu hình và mở rộng rất

cao. Hầu hết các chức năng JSF — như dẫn hướng và tìm kiếm các bean-quản lý

— có thể được thay thế bằng các thành phần cắm được. Tính dễ dàng cắm thêm

này mang lại cho bạn sự linh hoạt đáng kể trong việc xây dựng các GUI ứng dụng

Web của bạn và cho phép bạn kết hợp chặt chẽ các công nghệ dựa trên thành phần

khác một cách dễ dàng với các nỗ lực phát triển JSF của bạn. Ví dụ, bạn có thể

thay thế khung công tác có sẵn đảo ngược điều khiển (IoC) của JSF bằng khung

công tác Spring lập trình hướng khía cạnh (aspect-oriented programming -

AOP)/đảo ngược điều khiển đầy đủ tính năng hơn đối với việc tìm kiếm bean quản

lý. Tôi sẽ trình bày nhiều về các tính năng nâng cao ấy trong phần 2.

Công nghệ JSF và JSP

Giao diện người dùng của một ứng dụng JSF bao gồm các trang JavaServer Pages

(JSP). Mỗi trang JSP có chứa các thành phần JSF để thể hiện chức năng GUI. Bạn

sử dụng các thư viện thẻ tùy biến JSF bên trong các trang JSP để biểu hiện các

thành phần UI, để đăng ký trình xử lý sự kiện, để kết hợp các thành phần với các

trình duyệt tính hợp lệ (validator), để kết hợp các thành phần với các trình biến đổi

dữ liệu (converter), và nhiều hơn nữa.

JSF không có kiến thức về JSP

JSF không có gì để làm với bản thân JSP. JSF làm việc với JSP thông qua một cầu

nối thư viện thẻ JSP. Tuy nhiên, vòng đời của JSF là rất khác so với vòng đời của

JSP. Facelets phù hợp với JSF hơn nhiều so với JSP vì Facelets đã được thiết kế

với JSF trong tâm trí, trong khi việc kết hợp JSF và JSP luôn luôn giống như bắt

một miếng gỗ hình vuông vào trong một lỗ tròn. Bạn nên suy nghĩ về Facelets; các

tính năng của Facelets sẽ là một phần của JSF 2.0. Xem Tài nguyên để biết thêm

thông tin về Facelets.

Điều đó nói rằng, sự thật là JSF vốn đã không ràng buộc với công nghệ JSP. Trong

thực tế, các thẻ JSF được các trang JSP sử dụng chỉ để tham khảo các thành phần

sao cho chúng có thể được hiển thị. Các thành phần có một vòng đời khác với các

trang JSP.

Bạn sẽ thấy rõ điều này lần đầu tiên khi bạn sửa đổi một trang JSP để thay đổi các

thuộc tính của một thành phần JSF và nạp lại trang... và không có điều gì xảy ra.

Đó là do thẻ này tìm kiếm thành phần trong trạng thái hiện tại của nó. Nếu thành

phần đã tồn tại, thẻ tuỳ biến không thay đổi trạng thái của nó. Mô hình thành phần

cho phép mã của trình điều khiển của bạn thay đổi một trạng thái của thành phần

(ví dụ, vô hiệu một trường văn bản), và khi khung nhìn đó được hiển thị, trạng thái

hiện tại của cây thành phần của bạn được hiển thị.

Một ứng dụng JSF điển hình không cần phải có mã Java và có rất ít mã ngôn ngữ

biểu thức phổ quát (JSTL EL) trong UI. Như tôi đã lưu ý trước đó, có rất nhiều

công cụ IDE để xây dựng và hợp dịch các ứng dụng trong JSF, và có một thị

trường của bên thứ ba cho các thành phần GUI của JSF. Cũng có khả năng viết mã

JSF mà không sử dụng các công cụ WYSIWYG (như bạn sẽ làm trong hướng dẫn

này), mặc dù JSF đã được thiết kế với các công cụ WYSIWYG IDE trong tâm trí.

Chúng ta không cần sự hỗ trợ khó chịu của IDE WYSIWYG

Mặc dù JSF đã được thiết kế với sự hỗ trợ IDE WYSIWYG trong tâm trí, bạn

không cần phải sử dụng sự hỗ trợ IDE WYSIWYG để có được các lợi ích của JSF.

Trong thực tế, JSF vẫn còn dễ sử dụng hơn nhiều hơn so với hầu hết các khung

công tác Web Java ngay cả khi bạn viết mã nó bằng tay. Nếu bạn lập trình trong

Swing, và bạn sử dụng một IDE WYSIWYG, thì nhiều khả năng bạn sẽ sử dụng

một công cụ như vậy với JSF. Nếu bạn thích viết mã Swing bằng tay hơn, bạn

cũng sẽ thích mã hóa JSF bằng tay. Đó là lập trình tay không!

Các cải tiến trong JSP 1.2 và JSF 2.1

JSP 2.1 thêm nhiều tính năng mới để hỗ trợ JSF, bao gồm API ngôn ngữ biểu thức

phổ quát (EL) mà JSF 1.2 cũng bổ sung thêm vào. Với các thẻ JSTL tiêu chuẩn,

bây giờ bạn có thể lặp qua một danh sách và biểu hiện các thành phần JSF, điều

mà JSF 1.1 và JSP 2.0 không thể làm. Xem Tài nguyên để biết thêm chi tiết về các

thay đổi đã được thực hiện trong JSP 2.1. (Ngay cả với những cải tiến này,

Facelets vẫn phù hợp JSF tốt hơn nhiều, và có rất nhiều ý tưởng từ Facelets sắp

được đưa vào trong JSF 2.0.)

JSF và MVC

JSF là kết quả của các bài đã học thu được qua nhiều năm phát triển của các kỹ

thuật phát triển Web trên nền tảng Java. Xu hướng này bắt đầu với công nghệ JSP,

cho dù có nhiều ưu điểm, đã làm cho quá dễ dàng trộn lẫn mã Java với mã HTML

(và mã giống như HTML). Bước tiến tiếp theo là kiến trúc Mô hình 1 trong đó các

nhà phát triển đẩy hầu hết mã mặt sau vào trong các thành phần JavaBeans và sau

đó nhập khẩu các thành phần JavaBeans vào các trang Web với thẻ

<jsp:useBean>. Điều này đã hoạt động tốt với các ứng dụng Web đơn giản, nhưng

nhiều nhà phát triển Java không thích kết hợp công nghệ JSP với các đặc tính C++

ví dụ như là lệnh bao gồm (include) tĩnh. Vì vậy, kiến trúc Mô hình 2 đã được giới

thiệu.

Về cơ bản, kiến trúc Mô hình 2 là phiên bản MVC thấp hơn cho các ứng dụng

Web. Trong kiến trúc Mô hình 2, trình điều khiển được thể hiện bằng các servlet

(hoặc các Action) và việc hiển thị được giao cho các trang JSP. Struts của Apache

là một thực thi Mô hình 2 đơn giản hoá, nơi mà các Action thế chỗ các servlet.

Trong Struts, logic của trình điều khiển ứng dụng được tách ra khỏi các dữ liệu

của nó (được biểu diễn bằng ActionForms). Các lời phàn nàn chủ yếu chống lại

Struts là có thể cảm thấy nó có nhiều tính thủ tục hơn hướng đối tượng ("COBOL

cho Web"). WebWork và Spring MVC là hai kiến trúc Mô hình 2 khác để cải tiến

Struts để ít tính thủ tục hơn, nhưng cả hai đều không được chấp nhận rộng rãi như

là Struts. Và cả hai cũng không cung cấp một mô hình thành phần có trạng thái

như JSF đã làm. (Struts 2 được xây dựng bên trên WebWork, và cơ sở mã lệnh

Struts ban đầu đã bị loại bỏ. Ngay cả Struts cũng không muốn).

Vấn đề thực sự với hầu hết các khung công tác Mô hình 2 là ở chỗ mô hình sự

kiện quá đơn giản (chủ yếu là một MVC thu nhỏ nhiều), và nó không có thành

phần GUI có trạng thái, để lại quá nhiều công việc cho nhà phát triển. Một mô

hình thành phần và sự kiện phong phú hơn sẽ làm cho dễ dàng tạo ra các loại

tương tác mà hầu hết người dùng mong đợi. Cũng giống như công nghệ JSP, hầu

hết các khung công tác của Mô hình 2 cũng làm cho quá dễ dàng trộn lẫn bố trí và

định dạng HTML với các thẻ tùy biến GUI, hoạt động hơi giống như các thành

phần, ngoại trừ là chúng không có trạng thái. Và một số kiến trúc Mô hình 2 (như

Struts kinh điển) phạm lỗi tách biệt hành vi với trạng thái, đã mang lại cho nhiều

nhà phát triển Java cảm giác như họ đang lập trình COBOL.

Một môi trường MVC phong phú hơn

JSF không phải là Struts; hãy trút hết cốc của bạn để bạn có thể đổ đầy nó

JSF không phải là một khung công tác Mô hình 2. Nó có nhiều hơn thế. Nhiều

người tin rằng do tác giả ban đầu của Struts đã là người lãnh đạo đặc tả kỹ thuật

JSF, nên các kỹ năng Struts có thể được sử dụng trên một dự án JSF. Đừng cố

gắng lập trình JSF giống như Struts. Bạn cần phải từ bỏ một số kỹ năng Struts của

bạn và học các kỹ năng JSF.

JSF cung cấp một mô hình thành phần và một môi trường MVC phong phú —

phong phú hơn nhiều khung công tác Mô hình 2. JSF gần gũi hơn nhiều với một

môi trường lập trình MVC thực thụ hơn là gần kiến trúc Mô hình 2, mặc dù nó vẫn

đang được xây dựng bên trên một giao thức không trạng thái. JSF cũng tạo thuận

lợi cho việc xây dựng các GUI hướng sự kiện, mức chi tiết mịn hơn so với các

khung công tác Mô hình 2. Trong khi JSF cung cấp cho bạn một số đông các tùy

chọn sự kiện — mục trình đơn được chọn, nút ấn được nhấn, nút cây được mở

Tải ngay đi em, còn do dự, trời tối mất!