PDF:

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