Menu

Liferay 6.2: Vòng đời của Portlet - Phương thức init()

Pha khởi tạo của một portlet được thể hiện bởi phương thức init(). Khi một portlet được triển khai, portlet container sẽ xoá bỏ thể hiện (instance) đã có của nó và tạo các thể hiện mới. Lúc này, phương nó sẽ gọi phương thức init().

Giống như Servlet, Portlet có thể khởi tạo bất kỳ tài nguyên hoặc các hoạt động khác trong thời gian chạy phương thức init(). Hay nói một cách ngắn gọn, phương thức init() là nơi khởi tạo.
Servlet đọc các tham số khởi tạo từ tệp web.xml trong phương thức init() của nó. Tương tự như vậy, Portlet đọc các tham số khởi tạo từ tệp portlet.xml trong pha này. Nói chung thì các tham số khởi tạo được sử dụng để định nghĩa các trang (page flow) trong portlet.
Chúng ta sẽ xem các phương thức vòng đời làm việc như thế nào bằng cách tạo ra một portlet Liferay MVC. Đặt tên portlet là portlet-phase-lifecycle, eclipse sẽ tự động thêm -portlet vào cuối tên của project.
Ta có một lớp được gọi là com.opensource.techblog.portlet.PhaseAndLifecyclePortlet. Cấu trúc của portlet sẽ giống như hình sau:
Cấu trúc của project
Như tác giả đã đề cập trong bài viết Liferay MVC Portlet:
  • GenericPortlet cài đặt giao diện Portlet
  • LiferayPortlet kế từ từ GenericPortlet và cung cấp thêm các phương thức mới.
  • MVCPortlet được định nghĩa bởi Liferay. Nó là mở rộng của LiferayPorrtlet và cung cấp kiến trúc MVC bằng cách thêm vào vài phương thức nữa.
  • PhaseAndLifecyclePortlet (portlet mà chúng ta tạo ra) kế thừa từ MVCPortlet.

Phương thức init

Để hiểu được chu trình làm việc của phương thức init(), chúng ta sẽ ghi đè nó trong portlet của chúng ta. Có hai phiên bản của phương thức init() trong hệ thống phân cấp lớp của Liferay.

Phương thức init trong MVCPortlet

  • Cú pháp: public void init() throws PortletException
    • Phương thức này không có tham số.

Phương thức init trong GenericPortlet

  • Cú pháp: public void init(PortletConfig config) throws PortetException
    • Phương thức này có một tham số là PortletConfig
    • Đối tượng của PortletConfig được sử dụng để đọc các tham số cấu hình (trong tệp portlet.xml)
    • PortletConfig tương tự như ServletConfig (cái được sử dụng để đọc các tham số cấu hình portlet từ tệp web.xml)
Sau khi ghi đè hai phương thức init này, lớp của chúng ta sẽ trông giống như đoạn code sau đây:

Giải thích

  • LogFactoryUtil là lớp tiện ích được cung cấp bởi Liferay để ghi log của lớp hiện tại.
  • Chúng ta đã ghi đè cả hai phiên bản của phương thức init() và thêm vào đó vài dòng ghi log. Các lệnh log này sẽ hiển thị trong màn hình console khi portlet được triển khai.
  • Trong phiên bản thứ hai của phương thức init(), chúng ta sẽ đọc tham số khởi tạo được gọi là "view-template" và ghi nó vào log. tham số khởi tại "view-template" được định nghĩa trong tệp portlet.xml và được sử dụng để định nghĩa đường dẫn đến file jsp.
Sau khi thực hiện những thay đổi này và triển khai portlet. Đảm bảo rằng máy chủ của bạn vẫn đang chạy. Trong khi triển khai, portlet container sẽ gọi phương thức init() và bạn sẽ nhìn thấy những dòng log mà mình ghi ra ở màn hình console.
Log được ghi ra
  • Như bạn có thể thấy trong quá trình triển khai portlet này, phương thức init() ghi đè của lớp GenericPortlet được gọi trước theo sau là phương thức init() của phương thức MVCPortlet.
  • Có điều này là do GenericPortlet có vị trí cao hơn so với LiferayMVCPortlet trong sơ đồ phân cấp lớp.
  • Các dòng log cũng chỉ ra giá trị của tham số khởi tạo (view-template/view.jsp) cái mà được định nghĩa trong file portlet.xml. Chúng ta có thể đọc tất cả các phương thức khởi tạo trong phương thức init().
Kéo portlet này vào một vài trang trong Liferay. Khi refresh lại các trang này, phương thức init() sẽ không được gọi lại nữa. Nó chỉ được gọi khi portlet được khởi tạo bởi portlet container (trong quá trình triển khai lên server mà thôi). Điều này có nghĩa là mỗi khi chúng ta triển khai portlet thì phương thức init() sẽ được gọi.

Kết luận

Phương thức vòng đời init() sẽ được gọi bởi portlet container trong quá trình khởi tạo portlet.
Nó được gọi chỉ duy nhất một lần trong lúc triển khai portlet lên server.
Nó là nơi để chúng ta định nghĩa các tham số tại thời điểm khởi tạo portlet.
Bạn có thể đọc bài viết gốc tại địa chỉ: http://www.opensource-techblog.com/2014/12/portlet-lifecycle-method-init.html

Không có nhận xét nào:

Đăng nhận xét