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ữ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.

Lakshmi Priya, Kỹ sư phần mềm hệ thống, IBM

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



15 01 2010

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

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ố.

Ứ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:
    1. Đối với môi trường chạy đích, chọn WebSphere Portal v6.1.
    2. Đối với chuẩn portlet API, chọnJSR 286 Portlet.
    3. Đối với kiểu portlet, chọn Basic Portlet.
Hình 1. Cửa sổ tạo dự án portlet JSR 286
Khung nhìn dự án Portlet mới khởi tạo

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):

  1. Nhấn chuột phải vào phần mô tả triển khai portlet và chọn New > Portlet.
  2. Nhập tên portlet là OrderDetail, và nhấn Finish.
  3. Lặp lại các bước này để thêm vào hai portlets: OrdersPortlet và TrackingPortlet.
Hình 2. Cửa sổ tạo Portlet
Cửa sổ tạo sử dụng đặc tả JSR 286

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.

Hình 3.Portlet Orders (Portlet quản lý các đơn đặt hàng)
Các đơn đặt hàng của tháng chín

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
Các tùy chọn trên thực đơn thả xuống được chọn

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:
    1. Trong mục Event Name, chọn OrderIDType.
    2. Trong mục Value Type, chọn String.
Hình 5. Cửa sổ cho phép một portlet công bố các sự kiện
Trang 'mô tả sự kiện sẽ được công bố'
  1. 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" 
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>
		<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.

Hình 6. Trình duyệt dự án
Khung nhìn Enterprise Explorer

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.
Hình 7. Xử lý các tùy chọn của sự kiện
Thực đơn thả xuống hiển thị các lựa chọn được mô tả

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
OrderIDType được đưa vào trường tên sự kiện 'Event Name'
  1. 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.
  2. Nhấn Finish để hoàn tất việc xử lý:
    • 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.

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.
Hình 9. Tab Render Params trong trình soạn thảo phần mô tả sự triển khai Portlet
Cửa sổ các tham số trả về công khai

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>
  1. 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.
    1. Từ tab Portlets, chọn portlet Tracking .
    2. Cuộn xuống đến phần Supported Public Render Parameters trên cửa sổ bên phải, và nhấn Select.
  2. 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.
  3. Nhấn OK.
  4. 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.

Hình 10. Tham số hỗ trợ việc trả về công khai được thêm vào
Portlets view

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>
		<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>
  1. 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.
Hình 11. Công bố dự án portlet
Các lựa chọn trong thực đơn thả xuống

Nhấn chuột để phóng to hình

  1. Chọn WebSphere Portal V6.1 Server, xem hình 12.
  2. Nhấn Next, sau đó nhấn Finish.
Hình 12. Chọn máy chủ mà bạn muốn chạy ứng dụng của bạn trên đó
Cửa sổ chạy máy chủ

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 SendingReceiving.
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
Khung nhìn công cụ kết nối Portlet

Nhấn chuột để phóng to hình

  1. Nhấn vào dấu cộng, sau đó nhấn Done.
  2. 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
Khung nhìn 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.

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)
Khung nhìn TrackingPortlet

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.


Tải về

Mô tảTênKích thước
How to create events and public render parametersJSR286EventRenderParam.zip63KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Rational
ArticleID=462014
ArticleTitle=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
publish-date=01152010