Chào mừng đến với site của Bee! Chúc các bạn có những giây phút thực sự vui vẻ!!!

Chủ Nhật, 26 tháng 5, 2013

JSTL và các action thường sử dụng c:forEach, c:otherwise, c:choose..

JSTL và các action thường sử dụng c:forEach, c:otherwise, c:choose

JavaServer Pages Standard Tag Library (JSTL)

Vào năm 1997 Sun Microsystems giới thiệu các API Servlet. Servlet đã tạo 1 sự khác biệt rất lớn cho các nhà phát triển Web bằng CGIservlet mạnh mẽ và hiệu quả hơn. Tuy nhiên khi đưa vào áp dụng, các nhà lập trình đã chỉ ra rằng servlet có một thiếu sót hết sức quan trọng đó là các nhà phát triển web tạo ra giao diện về phía client bằng cách xuất ra các đoạn code HTML thông qua câu lệnh print. Điều này gây khó khăn trong việc duy trì mở rộng code. Điều thiếu sót này nhanh chóng được khắc phục bằng JSP cho phép nhúng các đoạn code Java.
Tuy nhiên, như trong hầu hết các trường hợp, giải pháp này lại có một thiếu sót của riêng nó: mã Java nhúng trong HTML sẽ dẫn đến sự phức tạp trong các trang JSP, sự kết hợp code business logicpresentation làm cho trang JSP trở nên khó hiểu và khó duy trì. Hơn nữa, việc chỉ giới hạn trong một số thẻ tiêu chuẩn như <jsp:useBean> hay <jsp:include>, JSP có thể tốt cho những người phát triển Web thông hiểu Java, nhưng sẽ gây khó khăn cho những người chưa có kinh nghiệm nhiều trong Java. Để đối phó với khó khăn này, các nhà phát triển Java lợi dụng một ưu điểm của Java là cho phép tạo ra các custom tag, rất nhiều custom tag được tạo ra ví dụ như Jakarta Taglibs được tạo ra bởi Apache Software Foundation

Từ sự phát triển của Jakatar Taglibs và những phản ứng tiêu cực khi phát triển web trên JSP, JavaServerPages Standard Tag Library (JSTL) được sinh ra. Sự kết hợp giữa Expression language và thư viện tiêu chuẩn toàn diện, JSTL đã tận diệt sự cần thiết phải dùng scriptletexpression trong trang JSP

I. JSTL là gì: JSTL bao gồm các phần sau:
- Expression Language
- Thư viện các hành động tiêu chuẩn
- Thư viện cho validation
- Expression Language được cho là tính năng quan trọng nhất của JSTL. Expression Language cho phép truy xuất vào các implicit object như request, response, các biến liên quan đến scope
- Thư viện các hành động tiêu chuẩn cung cấp một nền tảng vững chắc cho việc lập trình web từ việc lập vòng lập, import URLS đến kết nối database, đọc XML….

II. Các thư viện thẻ của JSTL:
- Thư viện thẻ của JSTL được chia làm 4 loại như sau:
Tên thư viện (prefix) Mô tả
Core (c) Chứa các hành động cơ bản như if, forEach….
Formatting (fmt) Định dạng và quốc tế hóa
SQL (sql) Truy xuất CSDL
XML (x) Phân tích và đọc dữ liệu từ XML


1. Core Action: gồm các chức năng sau
- Send output to the current JspWriter
- Gửi output đến JspWriter hiện tại
- Thao tác trên các thành phần của Java Bean
- Triển khai statement if hay switch
- Xử lý các Exception
- Duyệt qua các mảng giá trị, chuỗi
- Tạo các URLs và import tài nguyên
- Redirect servlet responses
- Chuyển các trả lời của Servlet
- Tạo và hủy các biến trong scope
- Các Action trong Core:

Tên Action Ý nghĩa
<c:catch> Catch những exception xảy ra trong code body
<c:choose> Chọn 1 trong nhiều đoạn mã để thi hành khi thỏa mãn điều kiện nào đó
<c:forEach> Vòng lặp quét hết tập hợp nào đó
<c:forToken> Vòng lặp quét hết 1 chuỗi nào đó theo chuỗi phân cách
<c:if> Thi hành đoạn code khi thỏa mãn điều kiện
<c:import> Import một URL nào đó
<c:otherwise> Xác định giá trị mặc định cho <c:choose>
<c:out> Gửi output cho JspWriter hiện hành
<c:param> Xác định 1 tham số URL cho <c:import> hay <c:url>
<c:redirect> Điều hướng request sang URL mới
<c:remove> Xóa 1 đối tượng trong 1 scope nào đó
<c:set> Tạo 1 đối tượng trong 1 scope nào đó
<c:url> Tạo 1 URL
<c:when> Khai báo điều kiện trong <c:choose>


2.
Formatting Action:
JSTL formatting Action cho phép người lập trình quốc tế hóa trang web của mình. Người lập trình có thể:
- Xác định resource bundle cho các thông báo với nhiều ngôn ngữ
- Xác định khu vực để định dạng ngày tháng, tiền tệ, phần trăm
- Các Action trong Formatting
Tên Action Ý nghĩa
<fmt:bundle> Xác định resoure bundle cho các messge đi kèm trong thẻ fmt:bundle
<fmt:setBundle> Xác định resoure bundle và gán vào 1 biến để dùng sau này
<fmt:formatDate> Định dạng ngày theo 1 vùng địa lý nào đó
<fmt:formatNumber> Định dạng số theo 1 vùng địa lý nào đó
<fmt:message> Truy xuất vào 1 message trong bundle


III.
Nguyên tắc thiết kế:
Để tận dụng tốt nhất của JSTL, bạn nên tìm hiểu những nguyên tắc thiết kế của JSTL, các nguyên tắc này áp dụng đối với nhiều thẻ trong JSTL nhưng không phải tất cả. Các nguyên tắc thiết kế thảo luận trongphần này là:
- Qui ước đặt tên
- Phạm vi của biến
- Các thuộc tính động
- Xử lý lỗi
1. Qui ước đặt tên:
- Tên thẻ và tên thuộc tính của thẻ được đặt tên theo qui ước đặt tên của Java: qui tắc Lạc Đà, từ đầu tiên là chữ thường, các từ tiếp theo được viết hoa đầu từ. Ví dụ:
<c:out value='${param.amount}'/>
<c:forEach var='item' items='${names}' varStatus='status'>
2. Scoped Variables vs. Scripting Variables
- Các thẻ JSTL như là một ống dẫn giữa trang JSP và mã code của Java. Thông qua ống dẫn này, thông tin được truyền từ trang JSP vào code Java và ngược lại. Hãy xem xét ví dụ sau đây:

<c:forEach var='item' begin='1' end='10'>
value = <c:out value='${item}'/><br>
</c:forEach>- Trong đoạn mã trên, trang JSP sử dụng thẻ <c:forEach> để gửi thông tin qua giá trị của biến “var” cho class tag handler. Class tag handler tạo ra 1 đối tượng “item” như là một biến cục bộ cho thẻ <c:forEach>
3. Các thuộc tính động:
- Giá trị của các thuộc tính trong JSTL có thể tĩnh hoặc động. Giá trị của thuộc tính động có thể được xác định thông qua các Expression Language (EL)
4. Xử lý lỗi:
- JSTL làm tất cả để tránh xảy ra các lỗi trong quá trình thi hành. Trong nhiều trường hợp nếu bạn khai báo giá trị null hay chuỗi rỗng cho thuộc tính, giá trị đó sẽ được chuyển đổi thành các hằng số vô hại ( như “0” chẳng hạn)
IV. Thẻ General-Purpose and Conditional:
- Một số nhiệm vụ cơ bản của các nhà phát triển JSP bao gồm tạo ra output, truy xuất và thay đổi giá trị các biến trên các scope, các thuộc tính của JavaBean, thực các biểu thức điều kiện và xử lý exceptions
- Các thẻ General-purpose:
- JSTL cung cấp 4 thẻ sau cho General Purpose:
<c:out>
<c:set>
<c:remove>
<c:catch>
- Ví dụ: chúng ta làm một ví dụ đơn giản về các thẻ general purpose như sau:
- Trong ví dụ trên chúng ta dùng EL để truy xuất vào parameter của request lấy giá trị của “buttonText”, và dùng <c:out> để xuất giá trị. Khi thi hành chúng ta có kết quả như hình sau:
Trước khi Submit
Sau khi submit
V. Thẻ Conditional:
- JSTL cung cấp 4 thẻ cho Conditional:
<c:if>
<c:choose>
<c:when>
<c:otherwise>
- Ngoài ra JSTL còn cung cấp thêm 2 thẻ cho vòng lặp là <c:forEach> và <c:forToken>
- Ví dụ: chúng ta làm ví dụ kết hợp các thẻ trên với nhau như sau:
- Đầu tiên chúng ta hiển thị kết quả từ vòng lặp:
- Khi trang web chạy lần đầu chúng ta cho phép người dùng nhập vào các giá trị cần thiết cho vòng lặp
- Trong trường hợp người dùng nhập vào các giá trị không đúng, chúng ta xuất thông báo lỗi như sau:
- Khi thi hành chúng ta có kết quả sau:
- Khi nhập liệu sai định dạng chúng ta có thông báo sau:
Đũa Cùi
bodua.com
Tham khảo từ nguồn:
Core JSTL: Mastering the JSP™ Standard Tag Library
By David M. Geary

Không có nhận xét nào: