III. Tag handler được triệu gọi như thế nào?
Giao tiếp Tag định nghĩa một qui ước truyền thơng cơ bản giữa tag
handler và lớp cài đặt trang JSP. Giao tiếp này định nghĩa chu kỳ sống và các
phương thức được triệu gọi khi gặp phải start tag và end tag của một action. Lớp cài đặt trang JSP triệu gọi các phương thức setPageContext,
doStartTag. Lớp này cũng bảo đảm rằng phương thức release sẽ được gọi trong tag handler trước khi kết thúc trang. Ví dụ sau thực hiện từng bước cách gọi tag handler.
Cách thực hiện tag handler khơng cĩ BodyContent
ATag t = new ATag(); t.setPageContext(...); t.setParent(...); t.setAttribute1(value1); t.setAttribute2(value2); t.doStartTag(); t.doEndTag(); t.release();
Giao tiếp BodyTag mở rộng từ giao tiếp Tag bằng cách định nghĩa thêm các phương thức cho phép tag handler truy cập vào thân của nĩ. Giao tiếp này cung cấp ba phương thức mới:
setBodyContent: tạo nội dung của thân tag và thêm vào tag handler.
doInitBody: được gọi trước khi định trị thân của tag.
DoAfterBody: được gọi trước khi định trị thân của tag. Ví dụ:
Cách thực hiện tag handler cĩ BodyContent
t.doStartTag();
out = pageContext.pushBody(); t.setBodyContent(out);
/* thực hiện các khởi tạo cần thiết sau khi nội dung của thân được gán */ t.doInitBody();
t.doAfterBody(); /**/
/* Khi doAfterBody trả về EVAL_BODY_TAG chúng ta lặp lại phần định trị cho thân tag */
...
t.doAfterBody(); /**/ t.doEndTag();
t.pageContext.popBody(); t.release();
Chương III JAVABEAN I. Khái niệm về JavaBean
Định nghĩa chính thức của JavaSoft về Bean: “JavaBean là một component phần mềm cĩ thể dùng lại được, cĩ thể được thực hiện trực quan bằng mơi trường phát triển tích hợp IDE (Integrated Development Environment).”
JavaBean là một đối tượng Java bất kỳ cài đặt interface Serializable. Chúng ta thường truy xuất các đối tượng Java thơng qua thuộc tính của nĩ, với JavaBean điều này cũng hồn tồn tương tự nhưng thường JavaBean khơng sử dụng trực tiếp cú pháp Java để truy xuất thuộc tính. JavaBean sử dụng các thẻ tương tự như HTML để định nghĩa Bean, thiết lập hoặc lấy về các giá trị của Bean.
Khi định nghĩa Bean chúng ta phải tuân theo các quy tắc sau:
Tên lớp của Bean phải cĩ tiếp vĩ ngữ là Bean chẳng hạn UserBean, DataAccessBean, ...Thật sự thì quy tắc này khơng là yêu cầu bắt buộc nhưng nĩ là một định hướng thơng dụng và cho phép những nhà phát triển khác hiểu ngay lập tức vai trị của lớp này. Một Bean phải cĩ một hàm tạo khơng cĩ tham số. Bean khơng nên cĩ bất kỳ biến thể hiện (field) nào là ‘public’. Các giá trị bền vững nên được truy cập thơng qua các phương thức gọi là getXxx và setXxx. Đối với các server-side Bean khơng nên dùng thư viện đồ hoạ.
Mẫu chuẩn để định nghĩa JavaBean như sau:
Public class YourBean implements java.io.Serializable {
protected int theValue; // Phương thức khởi tạo Bean public MyBean ()
{ }
// Khai báo phương thức đặt giá trị cho thuộc tính MyValue
public void setBeanValue (int newValue) {
theValue = newValue; }
// Khai báo phương thức trả về giá trị của thuộc tính MyValue
public int getBeanValue () {
return theValue; }
Chúng ta biên dịch thành phần Bean tương tư như biên dịch các lớp đối tượng Java thơng thường khác (sử dụng trình biên dịch javac của JDK). Nếu muốn triệu gọi đối tượng Bean trong trang JSP thì ta sử dụng mã Java của JSP Bean cĩ thể được khai báo và sử dụng như sau:
<html> <%
YourBean bean = new YourBean (); bean.setBeanValue (11 + 2);
out.println (bean.getBeanValue ()); %>
</html>
Tuy nhiên, mục đích của JavaBean là cho phép sử dụng các thẻ thay thế cho mã Java. Hãy xem Bean được định nghĩa và sử dụng thơng qua thẻ <jsp:useBean> sau đây:
<html>
<jsp:useBean id = “bean” scope = “page”>
<jsp:setProperty name = “bean” property = “BeanValue” value = “12 + 3”>
<jsp:getProperty name = “bean” property = “BeanValue”> </html>
Trong cách viết thứ hai, hồn tồn khơng cĩ mã Java. Trang JSP sử dụng cú pháp tương tự HTML dựa vào các thẻ để gán giá trị và truy xuất thuộc tính của JavaBean. Khi sử dụng các thẻ để truy xuất thuộc tính của Bean chúng ta khơng sử dụng các tiếp đầu ngữ get/set.