Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Lakshmi Priya Kỹ sư phần mềm hệ thống IBM 15 01 2010 Những tính năng mới được giới thiệu trong đặc tả Java portlet phiên bản 2.0 (Java portlet specification 2.0), dựa trên JSR 286, hỗ trợ sự kết hợp giữa các portlets. Các sự kiện và các tham số trả về công khai là hai cơ chế cho phép các portlets giao tiếp với nhau. Sau khi giới thiệu ngắn gọn về các khái niệm chính, bài viết sẽ hướng dẫn bạn từng bước tạo ra một mẫu ứng dụng portlet JSR 286 cơ bản bằng cách sử dụng bộ công cụ cổng thông tin (Portal Toolkit) trong IBM® Rational® Application Developer phiên bản 7.5. Trong khi thực hiện các bước nói trên, bài viết giải thích cách mà bộ công cụ cổng thông tin giải quyết toàn bộ quá trình để hỗ trợ cho những khả năng này. Các hướng dẫn chi tiết cho biết làm thế nào để kích hoạt các sự kiện và các tham số trả về công khai bằng cách sử dụng một trình thủ thuật và trình soạn thảo trực quan đặc tả triển khai portlet nâng cao. Ứng dụng mẫu mà bạn phát triển theo hướng dẫn của bài viết có thể được triển khai trên cổng thông tin IBM® WebSphere® Portal phiên bản 6.1. Xem thêm bài trong loạt bài này Các khái niệm chính Đầu tiên, bài viết này sẽ giải thích các khái niệm chính, sau đó các khái niệm này sẽ được minh họa bằng cách sử dụng một ứng dụng portlet mẫu. Các sự kiện Phiên bản 2 của the Java™ Specification Request (JSR) đặc tả 286 cho phép các portlets có thể gửi và nhận các sự kiện. Các sự kiện cho phép các portlets giao tiếp với nhau. IBM® Rational® Application Developer phiên bản 7.5 cung cấp một tập các công cụ để định nghĩa các sự kiện, kích hoạt các portlets, và truyền dữ liệu qua lại giữa chúng bằng cách sử dụng các sự kiện. Một portlet có thể xử lý cả hai đầu kết nối: • Gửi các sự kiện đến các portlet khác • Nhận và xử lý các sự kiện từ các portlet khác © Copyright IBM Corporation 2010 Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Nhẫn hiệu đăng ký Trang 1 của 24 developerWorks® ibm.com/developerWorks/vn/ Các thuộc tính của sự kiện Mỗi sự kiện phải có một tên và các thuộc tính phù hợp khác: • Tên: Tên duy nhất cho mỗi sự kiện. Tên sự kiện có thể là là một QName đầy đủ, một cái tên có đủ điều kiện được định nghĩa trong đặc tả XML, gồm có: một không gian tên (ví dụ, http:// www.ibm.com) và một phần cục bộ (ví dụ, sampleEvent). Bạn cũng có thể sử dụng cùng một không gian tên cho nhiều sự kiện bằng cách khai báo nó như là một không gian tên mặc định, sau đó chỉ cần chỉ ra phần cục bộ cho mỗi sự kiện. • Mô tả: (Tùy chọn) Phần mô tả sự kiện. • Kiểu giá trị: (Tùy chọn) Tên lớp Java đầy đủ điều kiện của giá trị được truyền đi cùng với sự kiện. • Bí danh: (Tùy chọn) Một tên thích hợp được dùng làm không gian tên của sự kiện. Để tạo ra một ứng dụng portlet có khả năng kết hợp các sự kiện và các tham số trả về công khai cho việc liên kết giữa các portlets, hãy hoàn thành các thao tác sau: 1. Tạo một dự án portlet JSR 286 và các portlet. 2. Tạo một định nghĩa sự kiện trong phần mô tả triển khai portlet (PDD). 3. Thêm một sự kiện hỗ trợ việc công bố hoặc một sự kiện được xử lý bởi portlet. 4. Sửa đổi cách thức hoạt động hoặc mã của sự kiện trong lớp của portlet để công bố và xử lý sự kiện. 5. Thêm các tham số trả về công khai. 6. Đưa dự án portlet lên máy chủ. 7. Nối các portlets lại với nhau. Những thao tác trên được đơn giản hóa bằng cách sử dụng các công cụ được cung cấp bởi Rational Application Developer V7.5. Các tham số trả về công khai Đặc tả JSR 286 cung cấp một cơ chế khác cho phép liên kết các portlets: các tham số trả về công khai (xem Tài nguyên để biết thêm chi tiết). Những tham số này cung cấp một cách để chia sẻ các tham số yêu cầu giữa các portlets. Các thuộc tính của các tham số trả về công khai Mỗi tham số phải có một tên và các thuộc tính khác: • Tên (name): (Bắt buộc) Tên duy nhất cho mỗi tham số, hoặc là một chuỗi ký tự, hoặc là một không gian tên. Hãy chọn không gian tên mặc định hoặc chỉ định một tên khác. Chuỗi định vị cụ thể của sự kiện mà bạn đã nhập vào như là tên của sự kiện được nối thêm vào tên không gian. • Định danh (Identifier): (Bắt buộc) Một chuỗi ký tự được dùng trong mã portlet code để tham chiếu đến tham số trả về. • Mô tả (Description): (Tùy chọn) Một mô tả của tham số trả về. • Bí danh (Alias): (Tùy chọn) Một tên thích hợp được dùng làm không gian tên của tham số. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 2 của 24 ibm.com/developerWorks/vn/ developerWorks® Ứng dụng mẫu được sử dụng trong bài viết Trong bài viết này, một ứng dụng portlet mẫu biểu thị sự hữu ích của các sự kiện và các tính năng tham số trả về công khai của JSR 286. Ứng dụng mẫu được sử dụng bởi một công ty vận tải đường thủy để duy trì thông tin chi tiết về khách hàng và các đơn đặt hàng. Nó gồm có ba portlets: • Portlet Orders duy trì thông tin chi tiết về đơn đặt hàng hàng tháng của công ty. • Portlet OrderDetails chỉ ra chi tiết của từng đơn đặt hàng. • Portlet TrackingDetails chỉ ra các chi tiết theo dõi vết một đơn đặt hàng. Bài viết minh họa cách tạo ra các sự kiện và các tham số trả về công khai, đồng thời sử dụng chúng trong ứng dụng mẫu. Xem Tải về để lấy về mẫu hoàn chỉnh. Ca sử dụng cho ví dụ mẫu Một người dùng có thể chọn một ID đơn đặt hàng của một tháng để xem chi tiết thông tin về đơn đặt hàng cũng như theo vết của đơn đặt hàng đó. Việc làm này được thực hiện bằng cách sử dụng các sự kiện và các tham số trả về công khai. Portlet Orders tóm tắt thông tin của tất cả các đơn đặt hàng trong một tháng. Khi người sử dụng nhắp chuột vào ID của một đơn đặt hàng trong portlet Orders, portlet kích hoạt một sự kiện. Sự kiện này được xử lý bởi portlet OrderDetails mà nó chỉ ra thông tin chi tiết về đơn đặt hàng mà ID được chọn. Tiếp theo, portlet OrderDetails tìm ra ID vết của đơn đặt hàng từ các chi tiết của đơn đặt hàng và truyền những chi tiết này đến portlet TrackingDetails như là một tham số trả về. Sau đó, portlet TrackingDetails chỉ ra các chi tiết về thông tin vết của đơn đặt hàng đó. 1. Để làm cho ca sử dụng này hoạt động, đầu tiên, hãy dùng Portal Toolkit trong Rational Application Developer 7.5 để khai báo một sự kiện được gọi là OrderIDType. Sự kiện này được thêm vào như một sự kiện hỗ trợ công bố cho portlet Orders cũng như hỗ trợ xử lý cho portlet OrderDetails. 2. Sau đó, bạn hãy tạo ra một tham số trả về công khai TrackingIDType và làm cho các portlets OrderDetails và TrackingDetails hỗ trợ tham số đó. Tạo ra dự án JSR 286 portlet và portlets Cửa sổ Portlet Project trong Rational Application Developer hỗ trợ việc tạo ra các dự án portlet JSR 286-compliant. Để tạo một dự án portlet: 1. Nhấn chuột vào File > New > Portlet Project để mở cửa sổ tạo mới dự án. 2. Chỉ định các chi tiết được chỉ ra trong hình 1: a. Đối với môi trường chạy đích, chọn WebSphere Portal v6.1. b. Đối với chuẩn portlet API, chọnJSR 286 Portlet. c. Đối với kiểu portlet, chọn Basic Portlet. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 3 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 1. Cửa sổ tạo dự án portlet JSR 286 Bước tiếp theo là thêm các portlets được yêu cầu vào ứng dụng portlet mà bạn vừa tạo ra. Giả sử rằng bài viết trình bày về ba portlets trong ứng dụng mẫu, bạn có thể thêm những portlets này vào dự án portlet (xem Hình 2): 3. Nhấn chuột phải vào phần mô tả triển khai portlet và chọn New > Portlet. 4. Nhập tên portlet là OrderDetail, và nhấn Finish. 5. Lặp lại các bước này để thêm vào hai portlets: OrdersPortlet và TrackingPortlet. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 4 của 24 ibm.com/developerWorks/vn/ developerWorks® Hình 2. Cửa sổ tạo Portlet Lưu ý: Bài viết này không thảo luận về cách sửa đổi các tệp Java™Server Pages (JSP™) và thêm chức năng mà bạn muốn vào các portlets, bởi trọng tâm của bài viết là tập trung vào việc tạo ra các sự kiện và các tham số trả về công khai. Giả sử rằng các portlets đã được sửa đổi, với portlet Orders chỉ ra các đơn đặt hàng của tháng, portlet OrderDetail chỉ ra chi tiết của đơn đặt hàng và portlet Tracking chỉ ra chi tiết vết của đơn đặt hàng. Hình 3 cho thấy OrdersPortlet sẽ nhìn như thế nào khi nó được đẩy lên máy chủ ứng dụng WebSphere phiên bản 6.1. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 5 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 3.Portlet Orders (Portlet quản lý các đơn đặt hàng) Tạo ra một định nghĩa sự kiện trong phần mô tả triển khai portlet Rất dễ dàng tạo ra các sự kiện với cửa sổ tạo sự kiện có trong Rational Application Developer. Để tạo ra ba sự kiện, hãy làm theo các bước sau: 1. Mở rộng dự án trong cửa sổ trình duyệt dự án (Project Explorer). 2. Nhấn chuột phải vào phần mô tả triển khai portlet và chọn Event. Như hiển thị trong hình 5, hai lựa chọn có sẵn khi chọn Event: • Cho phép Portlet này công bố sự kiện • Cho phép Portlet này xử lý sự kiện Hình 4. Các tùy chọn của sự kiện Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 6 của 24 ibm.com/developerWorks/vn/ developerWorks® Nhấn chuột để phóng to hình Thêm vào một sự kiện như là một sự kiện công bố portlet Các thao tác bạn cần thực hiện khi chọn tùy chọn đầu tiên, "Cho phép Portlet này công bố sự kiện", là: • Thêm một định nghĩa sự kiện vào ứng dụng portlet • Thêm sự kiện như là một sự kiện được hỗ trợ việc công bố • Sửa đổi phương thức processAction() hoặc processEvent() để công bố sự kiện Những thao bạn cần thực hiện khi chọn tùy chọn còn lại, "Cho phép Portlet này xử lý sự kiện", là: • Thêm định nghĩa sự kiện và ứng dụng portlet, nếu định nghĩa sự kiện này chưa tồn tại • Thêm sự kiện như là sự kiện hỗ trợ xử lý vào portlet • Sửa đổi phương thức processEvent() để xử lý sự kiện Bước tiếp theo là tạo ra sự kiện bằng cách sử dụng cửa sổ tạo sự kiện. Để cho phép portlet Orders công bố sự kiện OrderIDType, làm các bước sau: 1. Chuột phải vào portlet Orders nằm phía dưới phần mô tả triển khai portlet. 2. Chọn Event > Enable this Portlet to Publish events. Thao tác này mở cửa sổ tạo sự kiện. 3. Chỉ định các chi tiết, như trong hình 5: a. Trong mục Event Name, chọn OrderIDType. b. Trong mục Value Type, chọn String. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 7 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 5. Cửa sổ cho phép một portlet công bố các sự kiện 4. Nhấn Finish. Cửa sổ tạo sự kiện này tạo ra hai thay đổi trong phần mô tả việc triển khai portlet: • Thêm một định nghĩa sự kiện vào ứng dụng portlet • Thêm một sự kiện thuộc kiểu hỗ trợ công bố sự kiện cho portlet Mã lệnh in đậm trong Ví dụ 1 chỉ ra cách trình thủ thuật sự kiện sửa đổi mã trong phần mô tả triển khai của portlet. Ví dụ 1. Việc sửa đổi mã lệnh trong phần mô tả triển khai <?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" id="com.ibm.jsr286eventrenderparam.JSR286EventRenderParamPortlet.19a07d46c1"> <portlet> <portlet-name>OrderDetail</portlet-name> <?xml version="1.0" encoding="UTF-8"?> <portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 8 của 24 ibm.com/developerWorks/vn/ developerWorks® id="com.ibm.jsr286eventrenderparam.JSR286EventRenderParamPortlet.19a07d46c1"> <portlet> <portlet-name>OrderDetail</portlet-name> <display-name xml:lang="en">OrderDetail</display-name> <display-name>OrderDetail</display-name> <portlet-class> com.ibm.jsr286eventrenderparam.OrderDetailPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.OrderDetailPortletResoure </resource-bundle> <portlet-info> <title>OrderDetail</title> <short-title>OrderDetail</short-title> <keywords>OrderDetail</keywords> </portlet-info> </portlet> <portlet> <portlet-name>OrdersPortlet</portlet-name> <display-name xml:lang="en">OrdersPortlet</display-name> <display-name>OrdersPortlet</display-name> <portlet-class> com.ibm.jsr286eventrenderparam.OrdersPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.OrdersPortletResource </resource-bundle> <portlet-info> <title>OrdersPortlet</title> <short-title>OrdersPortlet</short-title> <keywords>OrdersPortlet</keywords> </portlet-info> <supported-publishing-event> <name>OrderIDType</name> </supported-publishing-event> </portlet> <portlet> <portlet-name>TrackingPortlet</portlet-name> <display-name xml:lang="en">TrackingPortlet</display-name> <display-name>TrackingPortlet</display-name> <portlet-class> com.ibm.jsr286eventrenderparam.TrackingPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 9 của 24 developerWorks® ibm.com/developerWorks/vn/ <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.TrackingPortletResource </resource-bundle> <portlet-info> <title>TrackingPortlet</title> <short-title>TrackingPortlet</short-title> <keywords>TrackingPortlet</keywords> </portlet-info> </portlet> <default-namespace>http://JSR286EventRenderParam/</default-namespace> <event-definition> <name>OrderIDType</name> <value-type>java.lang.String</value-type> </event-definition> </portlet-app> Sửa đổi mã phần xử lý hoạt động trong lớp portlet để công bố sự kiện Phương thức processAction() được sửa đổi để công bố sự kiện, như được thể hiện trong ví dụ 2. Ví dụ 2. Sửa đổi sự kiện processAction( ) public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException { if( request.getParameter(FORM_SUBMIT) != null ) { // Set form text in the session bean OrdersPortletSessionBean sessionBean = getSessionBean(request); if( sessionBean != null ) sessionBean.setFormText(request.getParameter(FORM_TEXT)); } //Initialize the fields in the class as per your requirement java.lang.String sampleObject = new java.lang.String(); response.setEvent("OrderIDType", sampleObject); } Bạn phải tùy chỉnh mã được sinh ra bởi cửa sổ tạo sự kiện cho phù hợp với nhu cầu của mình. Vì OrderIDType cần được gửi đi nên ID của đơn đặt hàng được lấy từ tham số của hành động vấn tin khi mà ID của đơn đặt hàng được chọn (xem Ví dụ 3). Ví dụ 3. Viết lệnh để gửi giá trị OrderIDType String order_id = request.getParameter(ORDER_ID); if (order_id!=null) response.setEvent("OrderIDType", order_id); Cửa sổ thay đổi portlet nằm dưới phần mô tả việc triển khai portlet, như hiển thị trong hình 6. Dưới nút OrdersPortlet, xuất hiện sự kiện OrderIDType. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 10 của 24 ibm.com/developerWorks/vn/ developerWorks® Hình 6. Trình duyệt dự án Thêm một sự kiện thuộc kiểu sự kiện xử lý được hỗ trợ bởi portlet Tiếp theo, ID của đơn đặt hàng cần được nhận bởi portlet OrderDetail. Nói cách khác, sự kiện được công bố lúc này phải được xử lý bởi portlet OrderDetail. Để cho phép portlet xử lý sự kiện, làm theo các bước sau: 1. Mở rộng mục Portlet Deployment Descriptor. 2. Nhấn phải chuột vào portlet OrderDetail và chọn Event > Enable this Portlet to Process Event. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 11 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 7. Xử lý các tùy chọn của sự kiện Nhấn chuột để phóng to hình Cửa sổ "Enable this portlet to process events" mở ra, giao diện như trong hình 8. Hình 8. Kích hoạt Portlet này trên cửa sổ xử lý các sự kiện 3. Trong mục Event Name, chọn OrderIDType đã được khai báo để sử dụng với cửa sổ công bố sự kiện. Bạn không thể sửa đổi định nghĩa sự kiện ở đây, nhưng bạn có thể hiệu chỉnh nó trong phần mô tả việc triển khai portlet. 4. Nhấn Finish để hoàn tất việc xử lý: Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 12 của 24 ibm.com/developerWorks/vn/ developerWorks® • Thêm thành phần supported-processing-event vào Portlet OrderDetail (bạn đã hoàn thành việc thêm định nghĩa cho sự kiện này khi mà bạn công bố nó) • Sửa đổi phương thức processEvent() để xử lý sự kiện Phần portlet của portlet OrderDetail được chỉnh sửa như trong ví dụ 4 dưới đây. Ví dụ 4. Chỉnh sửa portlet OrderDetail <portlet> <portlet-name>OrderDetail</portlet-name> <display-name xml:lang="en">OrderDetail</display-name> <display-name>OrderDetail</display-name> <portlet-class> com.ibm.jsr286eventrenderparam.OrderDetailPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.OrderDetailPortletResoure </resource-bundle> <portlet-info> <title>OrderDetail</title> <short-title>OrderDetail</short-title> <keywords>OrderDetail</keywords> </portlet-info> <supported-processing-event> <name>OrderIDType</name> </supported-processing-event> </portlet> Sửa đổi mã sự kiện trong lớp portlet để xử lý sự kiện Như hiển thị trong ví dụ 5, các thay đổi cũng được làm tương tự cho phương thức processEvent() (là phương thức chịu trách nhiệm xử lý sự kiện nhận được). Ví dụ 5. Sửa đổi phương thức processEvent( ) public void processEvent(EventRequest request, EventResponse response) throws PortletException, java.io.IOException { Event sampleEvent = request.getEvent(); if(sampleEvent.getName().toString().equals("OrderIDType")) { Object sampleProcessObject = sampleEvent.getValue(); } Bạn cần gửi giá trị TrackingID từ portlet OrderDetail đến portlet Tracking. Do đó, bạn cần sửa đổi phương thức processEvent(), xem đoạn mã được in đậm trong ví dụ 6. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 13 của 24 developerWorks® ibm.com/developerWorks/vn/ Ví dụ 6. Sửa đổi phương thức processEvent( ) public void processEvent(EventRequest request, EventResponse response) throws IOException, PortletException { Event sampleEvent = request.getEvent(); if(sampleEvent .getName().equals("OrderIDType")) { Object sampleProcessObject = sampleEvent.getValue(); response.setRenderParameter(ORDER_ID, sampleProcessObject.toString()); //set the order id as a render parameter OrderDetail od = ShippingDB.getOrderDetail(ev.getValue().toString()); if (od != null) { request.getPortletSession().setAttribute(ORDER_DETAIL, od); response.setRenderParameter("TrackingID", od.getTrackingId()); //fetch the tracking id from the order details, and set it as a render parameter. } } } Để Portlet OrderDetails hiển thị được Order Details, bạn cần sửa đổi phương thức doView() và thêm vào đoạn mã in đậm trong hình 7. Ví dụ 7. Sửa đổi phương thức doView( ) String orderId = (String) request.getParameter(ORDER_ID);//get the order set in the processAction() OrderDetail od = ShippingDB.getOrderDetail(orderId); PortletURL actionURL = ShippingUtils.createSimpleActionURL(ORDER_DETAILS, response); odb.setActionURL(actionURL); if (od != null) odb.setOrderDetail(od); getPortletContext().getRequestDispatcher(getJspFilePath(request, VIEW_JSP)) .include(request, response); Thêm các tham số trả về công khai Bước tiếp theo là sử dụng cơ chế tham số trả về công khai để chia sẻ giá trị ID theo vết giữa the portlet OrderDetail và portlet Tracking: 1. Mở phần mô tả sự triển khai các portlet của dự án EventSample. 2. Chọn tab Render Params, sau đó nhấn Add để tạo ra tham số trả về công khai với một tên mặc định, NewPublicRenderParam. 3. Thay đổi các trường Name và Identifier thành TrackingID, như trong hình 9. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 14 của 24 ibm.com/developerWorks/vn/ developerWorks® Hình 9. Tab Render Params trong trình soạn thảo phần mô tả sự triển khai Portlet Nhấn chuột để phóng to hình Thao tác này thêm phần được chỉ trong Ví dụ 8 vào phần định nghĩa ứng dụng portlet trong phần mô tả sự triển khai portlet. Hình 8. Đoạn mã được thêm vào phần mô tả sự triển khai portlet. <public-render-parameter> <identifier>TrackingID</identifier> <name>TrackingID</name> </public-render-parameter> 4. Vì những tham số này phải được chia sẻ bởi các portlet Tracking và OrderDetail, bạn cần thêm nó như là một tham số trả về công khai được hỗ trợ cho mỗi portlet. a. Từ tab Portlets, chọn portlet Tracking . b. Cuộn xuống đến phần Supported Public Render Parameters trên cửa sổ bên phải, và nhấn Select. 5. Trong mục tên, chọn Tracking ID, nó được tạo ra trong tab Render Params của trình soạn thảo, như trong hình 10. 6. Nhấn OK. 7. Lặp lại các bước 4 và 5 để thêm TrackingID như là một tham số trả về công khai của OrdersPortlet. Hình 10 chỉ ra tham số trả về công khai được thêm vào portlets. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 15 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 10. Tham số hỗ trợ việc trả về công khai được thêm vào Nhấn chuột để phóng to hình Những thay đổi như được chỉ ra trong phần in đậm ở ví dụ 9 được tạo ra trong phần mô tả việc triển khai portlet. Ví dụ 9. Sửa đổi trong phần mô tả triển khai portlet <portlet> <portlet-name>OrdersPortlet</portlet-name> <display-name xml:lang="en">OrdersPortlet</display-name> <display-name>OrdersPortlet</display-name> <portlet-class> com.ibm.jsr286eventrenderparam.OrdersPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.OrdersPortletResource </resource-bundle> <portlet-info> <title>OrdersPortlet</title> <short-title>OrdersPortlet</short-title> <keywords>OrdersPortlet</keywords> </portlet-info> <supported-publishing-event> <name>OrderIDType</name> </supported-publishing-event> <supported-public-render-parameter> TrackingID </supported-public-render-parameter> </portlet> <portlet> <portlet-name>TrackingPortlet</portlet-name> <display-name xml:lang="en">TrackingPortlet</display-name> <display-name>TrackingPortlet</display-name> Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 16 của 24 ibm.com/developerWorks/vn/ developerWorks® <portlet-class> com.ibm.jsr286eventrenderparam.TrackingPortlet </portlet-class> <init-param> <name>wps.markup</name> <value>html</value> </init-param> <expiration-cache>0</expiration-cache> <supports> <mime-type>text/html</mime-type> <portlet-mode>view</portlet-mode> </supports> <supported-locale>en</supported-locale> <resource-bundle> com.ibm.jsr286eventrenderparam.nl.TrackingPortletResource </resource-bundle> <portlet-info> <title>TrackingPortlet</title> <short-title>TrackingPortlet</short-title> <keywords>TrackingPortlet</keywords> </portlet-info> <supported-public-render-parameter>TrackingID </supported-public-render-parameter> </portlet> 8. Bạn phải sửa đổi phương thức doView() của portlet Tracking để hiển thị các chi tiết vết đơn đặt hàng dựa trên giá trị TrackingID của đơn đặt hàng (xem Ví dụ 10). Ví dụ 10. Sửa đổi phương thức doView( ) String renderParam = request.getParameter("TrackingID"); //fetch the tracking id render param which was set in the OrderDetails Portlet TrackingDetailBean tdb = new TrackingDetailBean(); request.setAttribute(TRACKING_DETAIL_BEAN, tdb); if (renderParam!=null && renderParam.length()>0) { PortletURL actionURL = ShippingUtils.createSimpleActionURL(TRACKING_DETAILS, response); tdb.setActionURL(actionURL); PortletURL rdActionURL = ShippingUtils.createSimpleActionURL(ROUTING_DETAILS, response); tdb.setRoutingDetailActionURL(rdActionURL); TrackingDetail td = ShippingDB.getTrackingDetail(renderParam); if (td != null) { tdb.setTrackingDetail(td); getPortletContext().getRequestDispatcher(getJspFilePath (request, VIEW_JSP)).include(request, response); } else { //Tracking id not found; print error page tdb.setErrorMessage("Tracking Id " + renderParam + " not found."); getPortletContext().getRequestDispatcher(getJspFilePath (request, ERROR_JSP)).include(request, response); } } Công bố dự án portlet Bây giờ bạn có thể công bố ứng dụng portlet lên máy chủ ứng dụng WebSphere phiên bản 6.1: 1. Nhấn chuột phải vào dự án portlet (xem Hình 11) và chọn Run As > Run on Server. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 17 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 11. Công bố dự án portlet Nhấn chuột để phóng to hình 2. Chọn WebSphere Portal V6.1 Server, xem hình 12. 3. Nhấn Next, sau đó nhấn Finish. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 18 của 24 ibm.com/developerWorks/vn/ developerWorks® Hình 12. Chọn máy chủ mà bạn muốn chạy ứng dụng của bạn trên đó Kết nối các portlets lại với nhau Công cụ kết nối có sẵn trên máy chủ của cổng thông tin có thể giúp bạn kết nối các mối quan hệ giữa các portlets mà chia sẻ các sự kiện giữa chúng. Để truy cập công cụ kết nối, thực hiện các bước sau: 1. Chọn Edit Page Layout cho trang mà trên đó đã đặt các portlets. 2. Chọn tab Wires. 3. Đối với portlet nguồn, chọn OrdersPortlet từ thực đơn thả xuống, và đối với portlet đích, chọn portlet OrderDetail (Hình 13). Đối với các tên sự kiện, nhấn vào mũi tên trên thực đơn thả xuống và chọn các trường Sending và Receiving. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 19 của 24 developerWorks® ibm.com/developerWorks/vn/ Hình 13. Thêm các kết nối để định nghĩa các mối quan hệ trong ứng dụng portlet Nhấn chuột để phóng to hình 4. Nhấn vào dấu cộng, sau đó nhấn Done. 5. Chọn một ID đơn đặt hàng (ví dụ, chọn đơn đặt hàng đầu tiên trong OrdersPortlet). Khi bạn nhấn chuột vào ID của đơn đặt hàng, một sự kiện sẽ được kích hoạt bởi portlet Orders, nó gửi giá trị Order_ID đến cho portlet Order Details. Khi portlet đó nhận được ID đơn đặt hàng, Portlet Order Details sẽ xử lý sự kiện. Nó tìm kiếm thông tin chi tiết về đơn đặt hàng và hiển thị chúng trên giao diện người sử dụng. Ngoài ra, portlet Order Details nhận được ID theo dõi vết thông tin đơn đặt hàng và truyền ID này tới portlet theo dõi chi tiết đơn đặt hàng, bởi vì TrackingID này được thêm vào như là một tham số trả về được chia sẻ cho cả portlets Order Details và Tracking. Do đó, khi người dùng nhấn vào một ID của đơn đặt hàng, thông tin chi tiết của đơn đặt hàng và thông tin theo dõi đơn đặt hàng sẽ được hiển thị (xem Hình 14). Hình 14. Portlet Orders Bây giờ, người dùng có thể thấy được thông tin chi tiết về đơn đặt hàng cũng như vết xử lý đơn đặt hàng, xem hình 15. Vì thế, các sự kiện và các tham số trả về công khai được dùng để truyền các giá trị về OrderID và TrackingID cho các portlets tương ứng. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 20 của 24 ibm.com/developerWorks/vn/ developerWorks® Hình 15. Các portlets chi tiết hóa và theo dõi vết đơn đặt hàng (Order và Tracking detail) Nhấn chuột để phóng to hình Như bạn nhìn thấy ở đây, các công cụ được cung cấp bởi Rational Application Developer 7.5 làm đơn giản đi rất nhiều việc tạo ra các sự kiện và các tham số trả về công khai. Bạn chỉ cần hiệu chỉnh mã lệnh đã được tạo ra cho phù hợp với yêu cầu của ứng dụng của bạn. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 21 của 24 developerWorks® ibm.com/developerWorks/vn/ Các tải về Mô tả Tên Kích thước How to create events and public render parameters JSR286EventRenderParam.zip 63KB Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 22 của 24 ibm.com/developerWorks/vn/ developerWorks® Tài nguyên • Đọc Có gì mới dành cho portlets trong chương trình Java Service Specification V2.0 JSR 286). • Đọc Có gì mới trong các đặc tính của IBM WebSphere Portal V6.1: JSR 286 để tìm hiểu về các khái niệm của các chuẩn mới, đặc biệt là về sự liên kết giữa các portlet, đã được tích hợp và tim hiểu nguyên tắc lựa chọn sử dụng các sự kiện portlet hay các tham số trả về công khai cho việc liên kết. • Tìm thêm thông tin về các tham số trả về công khai, cho phép các portlet JSR 286 chia sẻ thông tin trạng thái định hướng. • Ghé thăm Rational software area on developerWorks (Phần mềm Rational trên developerWords) tìm tài liệu kỹ thuật và thực hành sử dụng các sản phẩm Rational Software Delivery Platform. • Đăng ký để nhận bản tin IBM developerWorks, được cập nhật hàng tuần các bài hướng dẫn, bài báo hay nhất, tải về, tham gia các hoạt động cộng đồng, webcasts và các sự kiện. • Vào và đăng ký bản tin của developerWorks Rational zone, theo dõi nội dung của developerWorks Rational. Hàng tuần bạn sẽ nhận được bản cập nhật mới nhất về tài liệu kỹ thuật và thực hành về nền tảng Rational Software Delivery. • Đăng ký Rational Edge newsletter các bài báo về các khái niệm đằng sau việc phát triển phát triển. • Duyệt qua kho sách công nghệ tìm các sách về các chủ đề kỹ thuật này. • Tải về các phiên bản dùng thử phần mềm IBM Rational. • Tải về các phiên bản dùng thử sản phẩm IBM và làm quen với các công cụ phát triển ứng dụng và các sản phẩm trung gian từ DB2®, Lotus®, Tivoli®, và WebSphere®. Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 23 của 24 developerWorks® ibm.com/developerWorks/vn/ Đôi nét về tác giả Lakshmi Priya Lakshmi Priya là một kỹ sư phát triển phần mềm, chuyên xây dựng các thành phần công cụ cổng thông tin trong Rational Application Developer của IBM India Software Labs ở Delhi, Ấn Độ. Bà đứng đầu nhóm phát triển thành phần con của công cụ Portlet. Bà bắt đầu sự nghiệp với một nhóm tính toán rộng khắp tại Bangalore và đang làm việc về portlets và kỹ thuật dựa trên Eclipse © Copyright IBM Corporation 2010 (www.ibm.com/legal/copytrade.shtml) Nhẫn hiệu đăng ký (www.ibm.com/developerworks/vn/ibm/trademarks/) Bộ tạo cổng thông tin Rational Application Developer của IBM Phiên bản 7.5: Phần 5. Công cụ hỗ trợ cho các sự kiện và các tham số trả về công khai của các ứng dụng cổng thông tin và chuẩn portlet Trang 24 của 24