Danh mục

Kiến trúc 1 và 2 JSP (model 1 & 2architecture) - phần 3

Số trang: 29      Loại file: pdf      Dung lượng: 142.61 KB      Lượt xem: 14      Lượt tải: 0    
10.10.2023

Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

custom tag phải xác định “tên” của biến đối tượng; Tên này có thể truy xuất bằng cách gọi phương thức get[Attribute] của thuộc tính (xem 2) Các tag có thuộc tính). Nếu giá trị của biến kịch bản phụ thuộc vào đối tượng hiện tại trong tag handler thì nó có thể truy xuất đối tượng này bằng cách dùngpageContext.setAttribute(name, scope). Các giá trị của tham số scope được tóm tắc trong bảng sau: Phạm vi Có thể truy cập từ Thời gian sốngpage Trang hiện hành chuyển tới trang mới requestCho tới khi lời đáp gởi trở lại...
Nội dung trích xuất từ tài liệu:
Kiến trúc 1 và 2 JSP (model 1 & 2architecture) - phần 3custom tag phải xác định “tên” của biến đối tượng; Tên này có thể truy xuất bằngcách gọi phương thức get[Attribute] của thuộc tính (xem 2) Các tag có thuộctính).Nếu giá trị của biến kịch bản phụ thuộc vào đối tượng hiện tại trong tag handler thể truy xuất đối tượng này bằng cách dùngthì nó cópageContext.setAttribute(na me, scope). Các giá trị của tham số scope được tómtắc trong bảng sau:Phạm vi Có thể truy cập từ Thời gian sốngpage Trang hiện hành Cho tới khi lời đáp gởi trở lại user hoặc yêu cầu đượcchuyển tới trang mới Trang hiện hành và bất kỳ trang được include hay forward nàorequest Cho tới khi lời đáp gởi trở lại user Yêu cầu hiện hành và bất kỳ yêu cầu tiếp theo trong cùng browsersession Đời sống của một phiên làm việc (session) Bất kỳ yêu cầu hiện tại và tương lai nào từ cùng một ứng dụngapplication Đời sống của một ứng dụngNgoài việc cài đặt giá trị của biến trong tag handler, chúng ta c òn phải định nghĩamột lớp dẫn xuất từ lớp TagExtrInfo. Lớp này cung cấp thông tin cho JSPcontainer về đặt tính của của biến kịch bản, phải cài đặt phương thứcgetVariableInfo để trả về một mảng các đối tượng VariableInfo chứa các thôngtin sau: tên biến, lớp của biến, liệu biến này có tham khảo tới một giá trị đốitượng mới hay đã có, tính sẳn dùng của biến này.Bảng sau mô tả tính sẳn dùng của biến kịch bản và các phương thức để xác lập vàxác lập lại giá trị của biến.Value Availability Methods Giữa start tag và end tag. Trong doInitBody và doAfterBody đốiNESTEDvới tag handler cài đặt BodyTag; ngược lại trong doStartTag.AT_BEGIN Từ start tag cho đến cuối trang. Trong doInitBody, doAfterBody,và doEndTag đối với tag handler cài đặt BodyTag; ngược lại trong doStartTag vàdoEndTag. Sau end tag cho tới cuối trang.AT_END Trong doEndTag.Lớp tag handler sau lấy dữ liệu từ JNDI lookup được lưu trữ như là thuộc tính củađối tượng pageContext cùng với tên của biến kịch bản.Code 30: LookupTag.javapublic LookupTag extends TagSupport { private String type; private String name; public void setName(String name) { this.name = name; } public void setType(String type) { this. type = type; } public int doStartTag() { return SKIP_BODY; } public int doEndTag() throws JspException { try { InitialContext context = new InitialContext(); Object obj = (Object)context.lookup(name); pageContext.setAttribute(getId(), obj);Code 30: LookupTag.java (tiếp theo) } catch(javax.naming.NamingException e) { throw new JspException(Unable to look up + name + due to + e.getMessage()); } return EVAL_PAGE; }}Biến kịch bản sẽ được định nghĩa trong lớp dẫn xuất từ lớp TagExtraInfo. Dobiến được truyền vào như các thuộc tính của tag nên sẽ được truy xuất bởiphương thức getAttributeString của lớp TagData và dùng để lấp đầy hàm tạo củaVariableInfo. Để cho phép biến kịch bản được dùng trong phần còn lại của trangthì phạm vi của biến nên gán bằng AT_END.Code 31: LookupTagTei.javapublic class LookupTagTEI extends TagExtraInfo { public VariableInfo[] getVariableInfo(TagData data) { VariableInfo info1 = new VariableInfo( data.getAttributeString(id), data.getAttributeString(type), true, VariableInfo.AT_END); VariableInfo[] info = { info1 } ; return info; }}- TLD elementChúng ta cần phải báo cho JSP container biết nó nên dùng lớp TagExtraInfo đểtạo ra biến kịch bản với phạm vi thích hợp. Đoạn TLD có tên lookup.tld như sau:Code 32: TLD file...com.legiang.LookupTag com.legiang.LookupTagTEIname true false type true false...- JSP pageCode 33: JSP file... Tag handler được triệu gọi như thế nào?4.Giao tiếp Tag định nghĩa một qui ước truyền thông cơ bản giữa tag handler và lớpcài đặt trang JSP. Giao tiếp này định nghĩa chu kỳ sống và các phương thức đượctriệ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, setParent, và cácphương thức cài đặt thuộc tính trước khi gọi phương thức doStartTag. Lớp nàycũng bảo đảm rằng phương thức release sẽ được gọi trong tag handler trước khikết thúc trang. Ví dụ sau thực hiện từng bước cách gọi tag handler.Code 34: Cách thực hiện tag handler không có BodyContentATag 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ácphương thức cho phép tag handler truy cập vào thân của nó. Giao tiếp này cungcấ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ụ:Code 35: Cách thực hiện tag handler có BodyContentt.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ị chothân tag */...t.doAfterBody(); /**/t.doEndTag();t.pageContext.popBody();t.release();Phần II: Phân Tích – Thiết Kế – Cài ĐặtChương IV: PHÂN TÍCH – THIẾT KẾI. Phân Tích. Đặt vấn đề.1.Xuất phát từ nhu cầu thực ...

Tài liệu được xem nhiều: