Làm thế nào để chia sẻ các thuộc tính giữa các portlet?


Tổng quan: Tất cả các portlet (cả trong EAR Liferay và triển khai như individual WARS) có thể chia sẻ các thuộc tính bằng cách sử dụng đối tượng HttpSession mặc định của dùng 2 phương pháp khác nhau

Chú ý: Nếu tất cả các portlet được đóng gói trong cùng một WAR, những portlet sẽ chia sẻ cùng một session, tuy nhiên chúng sẽ có một session khác với portal từ portal là trong WAR của riêng mình.

Phương pháp 1 - Chia sẻ các thuộc tính giữa các portlet:

Phương pháp này liên quan đến việc đưa ra các portlet truy cập vào các session của portal. Namespacing không được sử dụng trong phương pháp này. Phương pháp này mong muốn cho hầu hết các tình huống, tuy nhiên có khả năng ghi đè lên một portlet khác của portlet (hoặc thậm chí của portal) thuộc tính được lưu trữ trong phiên này. Ví dụ, giả sử sau khi người dùng đăng nhập, portal bộ một đối tượng gọi là "người sử dụng" trong phiên này. Nếu một trong các portlet cũng thiết lập một đối tượng gọi là "người sử dụng" trong session này, trước "người sử dụng" đối tượng sẽ được clobbered

1) Trong Liferay-portlet.xml của mỗi WAR, thiết lập các thông số sau đây là false cho tất cả các portlet mà sẽ có thể chia sẻ các thuộc tính session (nó mặc định là true):
<private-session-attributes>false</private-session-attributes>

2) Trong classes Action hoặc JSP của bạn, sử dụng mã giống như sau để thiết lập các thuộc tính trong phiên giao dịch (điều này là chính xác như một cuộc gọi mặc định setAttribute()):

session.setAttribute("id", "1234567890");

3) Trong classes Action hoặc JSP của bạn, sử dụng mã giống như sau để lấy các thuộc tính từ phiên giao dịch (điều này là chính xác như một mặc định của getAttribute()):

String id = (String)session.getAttribute("id");

Phương pháp 2 - Chia sẻ các thuộc tính từ portal cho các portlet:

Kể từ khi các portlet được triển khai trong wars khác nhau có những khác so với sessions portal, phương pháp này liên quan đến việc sao chép các thuộc tính namespaced session từ session portal cho mỗi session của portlet. Các ủng hộ của phương pháp này là các thuộc tính sẽ không bao giờ vô tình ghi đè như trong Phương pháp 1. Nói cách khác, các portlet không thể cập nhật các thuộc tính ... họ chỉ có thể đọc chúng.

1) Trong Liferay-portlet.xml của mỗi WAR , thiết lập các thông số sau đây là true cho tất cả các portlet mà sẽ có thể chia sẻ các thuộc tính kỳ session namespaced (nó mặc định là true):

<private-session-attributes>true</ tin-session-thuộc tính>

2) Trong portal-ext.properties, ghi đè lên tài sản sau đây và cung cấp một danh sách các dấu phẩy phân cách của giá trị sử dụng cho các thuộc tính namespacing cần được chia sẻ bởi tất cả các portlet:

session.shared.attributes = LIFERAY_SHARED_

3) Trong classes portal của bạn (ví dụ, LoginPostAction), sử dụng mã giống như sau để thiết lập các thuộc tính trong phiên portal mà bạn muốn được chia sẻ giữa tất cả các portlet:


session.setAttribute ("LIFERAY_SHARED_id", "1234567890");

4) Trong classes Action portlet hoặc JSP của bạn, sử dụng mã giống như sau để lấy các thuộc tính từ kỳ họp đã được thiết lập bởi portal:

PortletSession psession = req.getPortletSession ();
psession.getAttribute ("LIFERAY_SHARED_id", PortletSession.APPLICATION_SCOPE);

No comments:

Post a Comment