Tải bản đầy đủ (.doc) (44 trang)

Tai lieu huong dan viet portlet don gian tren liferay

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (971.1 KB, 44 trang )

HƯỚNG DẪN TẠO PORTLET ĐƠN GIẢN TRÊN
LIFERAY
I.

Mục tiêu
Hướng dẫn viết portlet feedback đơn giản trên Liferay sử dụng Liferay IDE

II. Công nghệ sử dụng


JSF (JavaServer Faces): là một framework dùng để phát triển các ứng dụng web
bằng Java. Liferay hỗ trợ phát triển portlet bằng JSF.



Hibernate: là một ORM (Object Relational Mapping) framework của Java, dùng để
hỗ trợ việc truy xuất database.

Page 1 of 44


MỤC LỤC
HƯỚNG DẪN TẠO PORTLET ĐƠN GIẢN TRÊN LIFERAY...............................................1
I.

Mục tiêu..........................................................................................................................1

II.

Công nghệ sử dụng......................................................................................................1


MỤC LỤC..................................................................................................................................2
PHẦN 1: CHUẨN BỊ MÔI TRƯỜNG......................................................................................4
I.

Chuẩn bị..........................................................................................................................4

II.

Cấu hình Liferay Portal...............................................................................................5

III.

Cấu hình Liferay IDE..................................................................................................6

1.

Cấu hình JRE...........................................................................................................6

2.

Cài đặt Liferay Plugin SDK.....................................................................................7

3.

Cài đặt Liferay Server..............................................................................................9

PHẦN 2: TẠO FEEDBACK PORTLET.................................................................................13
I.

Mục tiêu........................................................................................................................13


II.

Tạo database..............................................................................................................13

III.

Tạo mới Liferay Portlet Project.................................................................................16

IV.

Thêm thư viện hibernate vào project.........................................................................18

V.

Tạo Java Object cho bảng feedback..........................................................................19

VI.

Tạo tập tin cấu hình cho Hibernate............................................................................21

VII.

Tạo lớp hỗ trợ cho Hibernate.....................................................................................22

VIII.
IX.

X.


Tạo lớp DataProvider.............................................................................................23
Tạo portlet thêm mới feedback..................................................................................24

1.

Tạo Managed Bean................................................................................................24

2.

Tạo giao diện.........................................................................................................25

3.

Khai báo thông tin portlet......................................................................................28

4.

Deploy portlet........................................................................................................30
Tạo portlet hiển thị danh sách feedback....................................................................32
Page 2 of 44


1.

Tạo Managed Bean................................................................................................32

2.

Tạo giao diện.........................................................................................................33


3.

Khai báo thông tin portlet......................................................................................35

4.

Deploy portlet........................................................................................................36

XI.

Cấu trúc project sau khi hoàn thành..........................................................................38

Page 3 of 44


PHẦN 1: CHUẨN BỊ MÔI TRƯỜNG
I.

Chuẩn bị


Phần cứng: tối thiểu 1GB Ram



Liferay portal 6.0 Community Edition Bundled with Tomcat (tham khảo tài liệu
Huong dan cai dat Liferay 6.0 voi Postgres 8)




Liferay IDE 1.3.1 (là phiên bản eclipse 3.7 đã được cài đặt sẵn Liferay IDE) (địa chỉ
tải về />


Liferay plugin SDK 6.1.0 b3 (SDK 6.1.0 trở lên mới hỗ trợ JSF 2 portlet) địa chỉ tải
về />
Page 4 of 44




Thư viện JSF 2 (đã được kèm theo trong gói Liferay plugin SDK)



Thư viện Hibernate 3.6 (địa chỉ tải về:
/>
II. Cấu hình Liferay Portal
Ta sẽ chuyển Liferay portal sang chế độ Developer. Chế độ Developer sẽ tối ưu Liferay cho
việc phát triển portlet với những hỗ trợ sau:


Tắt cache để bất cứ thay đổi nào cũng được cập nhật nhanh nhất có thể mà không cần
khởi động lại Liferay



Hiển thị nhiểu thông tin hơn khi có lỗi xảy ra
Page 5 of 44



Để bật chế độ Developer trong Liferay 6, vào thư mục C:\liferay-portal-6.0.6\tomcat6.0.29\bin , mở tập tin setenv.bat. Tìm đến dòng sets JAVA_OPTS thêm tùy chọn
-Dexternal-properties=portal-developer.properties.

III. Cấu hình Liferay IDE
1.

Cấu hình JRE

Liferay IDE đã có tích hợp sẵn java compiler, vì vậy ta chỉ cần cấu hình JRE (không cần
JDK) cho Liferay IDE, ở đây ta sẽ sử dụng JRE kèm theo gói Liferay.
Click chuột phải vào My Computer, chọn Properties để hiển thị hộp thoại System
Properties
Trong hộp thoại System Properties, chọn thẻ Advanced, nhấn chọn Evironment Variables.

Hộp thoại Evironment Variables hiện ra. Trong phần System variables, chọn dòng Path rồi
nhấn nút Edit để chỉnh sửa.

Page 6 of 44


Trong hộp thoại hiện ra, thêm đường dẫn đến jre của Liferay là C:\liferay-portal6.0.6\tomcat-6.0.29\jre1.6.0_20\win\bin vào mục Variable value (lưu ý dấu ‘;’)

Để kiểm tra, vào Start - Run, gõ cmd để vào Command Prompt. Trong cửa sổ Command
Prompt, gõ java –version. Hệ thống sẽ hiển thị phiên bản java nếu thiết đặt đúng

2.

Cài đặt Liferay Plugin SDK


Giải nén gói Liferay IDE vào ổ thư mục thích hợp, ví dụ C:\.
Giải nén gói Liferay plugin SDK vào thư mục C:\eclipse\plugins của Liferay IDE
Page 7 of 44


Vào thư mục C:\eclipse, chạy tập tin eclipse.exe để khởi động Liferay IDE.
Chọn menu Windows - Preferences
Trong hộp thoại Preferences, chọn Liferay - Installed SDKs, nhấn nút Add để thêm Liferay
plugin SDK

Chọn đến thư mục của Liferay plugin SDK

Page 8 of 44


3.

Cài đặt Liferay Server

Trong hộp thoại Preferences của Liferay IDE, chọn Server - Runtime Environments, nhấn
nút Add để thêm Server

Tìm đến mục Liferay, Inc chọn Liferay v6.0 CE (Tomcat 6).
Check vào tùy chọn Create a new local server để Liferay IDE tự động tạo một instance
Server dựa trên Runtime Server này. Nhấn Next

Page 9 of 44


Tìm đến thư mục tomcat của Liferay portal đã cài trước đó. Nhấn Finish


Page 10 of 44


Lúc này, trên giao diện chính của Liferay IDE sẽ xuất hiện instance server vừa tạo.
Để kiểm tra server vừa tạo, click chuột phải lên server chọn Start để khởi động Liferay portal
từ Liferay IDE

Nếu server khởi động thành công (server chuyển trạng thái sang Started), click chuột phải lên
Server chọn Open Liferay Portal

Trang chủ của Liferay sẽ hiển thị trong cửa sổ của Liferay IDE
Page 11 of 44


Page 12 of 44


PHẦN 2: TẠO FEEDBACK PORTLET
I.

Mục tiêu

Phần này sẽ hướng dẫn tạo 2 portlet:


Thêm feedback: cho phép người dùng thêm mới một feedback




Quản lý feedback: cho phép người dùng xem danh sách các feedback và thông tin chi
tiết của một feedback

II. Tạo database
Vào pgAdmin III, chọn LIFERAY_TEST - Schemas - public, click chuột phải lên Tables
chọn New Table

Trong hộp thoại New table, chọn thẻ Properties, đặt tên cho table là feedback

Page 13 of 44


Chọn thẻ Columns, nhấn nút Add để tiến hành thêm các cột như thông tin trong bảng dưới
đây:
STT

Tên trường

Kiểu dữ liệu

Khóa
chính

Not
null

Diễn giải

x


x

Kiểu integer tự tăng

1

fb_id

Serial

2

fb_tieude

character varying(200)

x

Tiêu đề

3

fb_nguoigoi_ten

character varying(200)

x

Tên người gởi


4

fb_nguoigoi_email

character varying(200)

x

Email người gởi

5

fb_noidung

Text

x

Nội dung phản hồi

Chọn thẻ Constraints, chọn Primary nhấn nút Add để thêm khóa chính

Page 14 of 44


Trong hộp thoại New Primary Key, trong thẻ Properties nhập tên cho primary key vào mục
Name

Chọn thẻ Columns, chọn cột fb_id nhấn nút Add để thêm fb_id vào làm khóa chính. Nhấn
OK


Page 15 of 44


Sau khi tạo xong khóa chính, nhấn OK trên hộp thoại New table để tạo bảng feedback

III. Tạo mới Liferay Portlet Project
Vào menu File - New - Liferay Project
Trong hộp thoại New Liferay Project, đặt tên cho Project là feedback, chọn SDK và Liferay
runtime (vừa cấu hình ở trên). Chọn kiểu Plugin là Portlet. Nhấn Next

Page 16 of 44


Chọn JSF 2 làm framework phát triển portlet. Nhấn Finish

Nếu Liferay IDE hiển thị thông báo đề nghị sử dụng Liferay perspective. Chọn Yes

Project vừa tạo sẽ xuất hiện trong phần Package Explorer
Page 17 of 44


IV. Thêm thư viện hibernate vào project
Giải nén gói Hibernate, tìm và chép 8 tập tin sau vào thư mục lib của feedback portlet
(C:\eclipse\plugins\liferay-plugins-sdk-6.1.0-b3-20111014\portlets\feedbackportlet\docroot\WEB-INF\lib):


hibernate3.jar




hibernate-jpa-2.0-api-1.0.1.Final.jar



antlr-2.7.6.jar



commons-collections-3.1.jar 3.



dom4j-1.6.1.jar



javassist-3.12.0.GA.jar



jta-1.1.jar



slf4j-api-1.6.1.jar

Vào Liferay IDE, click chuột phải lên feedback project, chọn Properties. Trong hộp thoại
hiện ra, ở mục Java Build Path chọn thẻ Libraries. Nhấn nút Add External JARs


Tìm đến thư mục lib của feedback portlet, thêm các tập tin vừa chép bên trên vào project

Page 18 of 44


V.

Tạo Java Object cho bảng feedback

Thêm package feedback vào project.
Để sử dụng hibernate, ta vào docroot/WEB-INF/src/feedback, tạo class Feedback
(Feedback.java) để mapping với table feedback. Hibernate sẽ tương tác với table feedback
thông qua class Feedback này.
package feedback;
import
import
import
import
import
import
import

javax.persistence.Column;
javax.persistence.Entity;
javax.persistence.GeneratedValue;
javax.persistence.GenerationType;
javax.persistence.Id;
javax.persistence.SequenceGenerator;
javax.persistence.Table;


@Entity
@Table(name = "feedback")
public class Feedback implements java.io.Serializable {
@Id
@SequenceGenerator(name="feedback_fb_id_seq",
sequenceName="feedback_fb_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,
generator="feedback_fb_id_seq")
@Column(name="fb_id", unique=true, nullable=false)
private int fbId;
@Column(name="fb_tieude", nullable=false)
private String fbTieude;
@Column(name="fb_nguoigoi_ten", nullable=false)
private String fbNguoigoiTen;
@Column(name="fb_nguoigoi_email", nullable=false)
private String fbNguoigoiEmail;
@Column(name="fb_noidung", nullable=false)
private String fbNoidung;

Page 19 of 44


public Feedback() {
}
public Feedback(int fbId, String fbTieude, String fbNguoigoiTen,
String fbNguoigoiEmail, String fbNoidung) {
this.fbId = fbId;
this.fbTieude = fbTieude;
this.fbNguoigoiTen = fbNguoigoiTen;
this.fbNguoigoiEmail = fbNguoigoiEmail;

this.fbNoidung = fbNoidung;
}
public int getFbId() {
return this.fbId;
}
public void setFbId(int fbId) {
this.fbId = fbId;
}
public String getFbTieude() {
return this.fbTieude;
}
public void setFbTieude(String fbTieude) {
this.fbTieude = fbTieude;
}
public String getFbNguoigoiTen() {
return this.fbNguoigoiTen;
}
public void setFbNguoigoiTen(String fbNguoigoiTen) {
this.fbNguoigoiTen = fbNguoigoiTen;
}
public String getFbNguoigoiEmail() {
return this.fbNguoigoiEmail;
}
public void setFbNguoigoiEmail(String fbNguoigoiEmail) {
this.fbNguoigoiEmail = fbNguoigoiEmail;
}
public String getFbNoidung() {
return this.fbNoidung;
}
public void setFbNoidung(String fbNoidung) {

this.fbNoidung = fbNoidung;
}
}

Trong đó, @Entity, @Table, @Column,… là các chú giải (annotation) để hibernate mapping
với các đối tượng tương ứng với table trong database:
Page 20 of 44




@Table: khai báo thông tin của table tương ứng trong database
o Name: tên bảng (feedback)



@Id: cho biết thuộc tính đó tương ứng với cột là khóa chính trong table (fb_id)



@SequenceGenerator: khai báo bộ sinh mã tự động (hibernate sẽ sinh mã tự động
thông qua bộ sinh mã tự động của PostgreSQL)
o Name: tên bộ sinh mã tự động, ở đây ta đặt trùng với tên sequence tương ứng
trong PostgreSQL
o sequenceName: tên sequence tương ứng trong PostgreSQL (feedback_fb_id_seq)
Để xem tên sequence do PostgreSQL tạo ra cho cột fb_id, trong pgAdmin III chọn
bảng feedback rồi chọn thẻ Dependents

o allocationSize: giá trị tăng của mã mới so với mã cũ (mặc định là 50)



@GeneratedValue: khai báo bộ sinh mã tự động của hibernate sẽ được sử dụng đẻ
sinh giá trị cho thuộc tính
o strategy: chiến thuật sinh mã, phụ thuộc vào database sử dụng, với PostgreSQL sẽ
là SEQUENCE
o generator: tên bộ sinh mã của Hibernate, chính là Name của @SequenceGenerator

VI. Tạo tập tin cấu hình cho Hibernate
Trong thư mục docroot/WEB-INF/src, tạo ra tập tin hibernate.cfg.xml để chứa các tham số
cấu hình cho hibernate với nội dung sau:
<?xml version="1.0" encoding="UTF-8"?>
Configuration DTD 3.0//EN"
" /><hibernate-configuration>
name="hibernate.connection.driver_class">org.postgresql.Driver</property>
name="hibernate.connection.url">jdbc:postgresql://localhost:5432/LIFERAY_TE

Page 21 of 44


ST</property>
postgres</property>
1234567</property>
name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<mapping class="feedback.Feedback" />
</session-factory>

</hibernate-configuration>

Trong đó:


connection.url=url đến database, có dạng: jdbc:postgresql://[ip_database _server]:
[port_của_postgresql]/[tên_database] (nếu database nằm ở máy cục bộ thì
ip_database _server có thể là 127.0.0.1 hoặc localhost)
o [ip_database_server]: nếu là database nằm ở máy cục bộ thì
ip_database_server có thể là 127.0.0.1 hoặc localhost
o [port_của_postgresql]: port mặc định của PostgreSQL là 5432
o [tên_database]: tên database, trong tài liệu này là LIFERAY_TEST



connection.username=tên tài khoản đăng nhập vào PostgreSQL



connection.password=mật khẩu đăng nhập vào PostgreSQL



mapping class=đường dẫn đầy đủ đến class mapping với table trong database (ở đây
là class Feedback nằm trong feedback package)

VII. Tạo lớp hỗ trợ cho Hibernate
Trong thư mục docroot/WEB-INF/src/feedback, tạo class HibernateUtil (HibernateUtil.java)
để hỗ trợ việc tạo session kết nối đến database cũng như thực hiện các câu truy vấn thông qua
hibernate.

package feedback;
import
import
import
import

org.hibernate.HibernateException;
org.hibernate.Session;
org.hibernate.SessionFactory;
org.hibernate.cfg.Configuration;

public class HibernateUtil {
public static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Initial SessionFactory creation failed.\n "
+ ex);

throw new ExceptionInInitializerError(ex);
}

Page 22 of 44


}
public static final ThreadLocal session = new ThreadLocal();

public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this thread has none yet
if (s == null || s.isOpen() == false) {
s = sessionFactory.openSession();
// Store it in the ThreadLocal variable
session.set(s);
}
return s;
}
// private static final SessionFactory sessionFactory;
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}

VIII. Tạo lớp DataProvider
Trong thư mục docroot/WEB-INF/src/feedback, tạo class FeedbackDataProvider
(FeedbackDataProvider.java) để thực thi các truy vấn đến PostgreSQL.
package feedback;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class FeedbackDataProvider {
/**
* Thêm feedback mới
* @param fb
*/
public void addFeedback(Feedback fb) {

Session session = HibernateUtil.currentSession();
session.beginTransaction();
session.save(fb);
session.getTransaction().commit();
}
/**
* Tìm tất cả feedback
* @return
*/
public List<Feedback> getAllFeedback() {
List<Feedback> listFeedback = new ArrayList<Feedback>();
Session session = HibernateUtil.currentSession();
session.beginTransaction();

Page 23 of 44


Query q = session.createQuery(
"FROM Feedback ORDER BY fbId");
listFeedback = q.list();
session.getTransaction().commit();
return listFeedback;
}
/**
* Tìm Feedback theo id
* @param id
* @return
*/
public Feedback getFeedbackById(int id) {
Session session = HibernateUtil.currentSession();

session.beginTransaction();
Feedback fb = (Feedback) session.get(Feedback.class, id);
session.getTransaction().commit();
return fb;
}

}

Để thực hiện các câu truy vấn với Hibernate, trước tiên cần tạo đối tượng Session thông qua
lớp HibernateUtil. Đối tượng Session có hỗ trợ sẵn một số phương thức như:


save: thêm mới đối tượng (phương thức addFeedback(Feedback fb))



update: cập nhật đối tượng



get: lấy đối tượng theo khóa chính (phương thức getFeedbackByid(int id))

Ngoài ra, Session cũng hỗ trợ các câu truy vấn SQL thông qua đối tượng Query, trong đó các
table, column trong database được thao tác thông qua lớp mapping tương ứng (lớp
Feedback).

IX. Tạo portlet thêm mới feedback
1.

Tạo Managed Bean


Trong thư mục docroot/WEB-INF/src/feedback, tạo class FeedbackThemBean
(FeedbackThemBean.java) để tạo Managed Bean. Managed Bean là những lớp dùng để lưu
trữ dữ liệu và có thể được truy cập từ JSF page (các trang html).
package feedback;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
@ManagedBean(name="FeedbackThemBean")
@ViewScoped
public class FeedbackThemBean implements Serializable {
private static final long serialVersionUID = 5740876438942756226L;

Page 24 of 44


private FeedbackDataProvider objFeedbackDataProvider;
private Feedback objFeedback;
private String thongTin;
public Feedback getObjFeedback() {
return objFeedback;
}
public void setObjFeedback(Feedback objFeedback) {
this.objFeedback = objFeedback;
}
public String getThongTin() {
return thongTin;
}
/**

* Hàm xây dựng
*/
public FeedbackThemBean() {
// khởi tạo các đối tượng
objFeedbackDataProvider = new FeedbackDataProvider();
objFeedback = new Feedback();
}

thongTin = "Gởi ý kiến";

/**
* Khi người dùng nhấn nút Gửi
* @param event
*/
public void actionThemFeedback(ActionEvent event) {
objFeedbackDataProvider.addFeedback(objFeedback);
objFeedback = new Feedback();
thongTin = "Ý kiến của bạn đã được gởi đi";
}
}

Để khai báo một class là Managed Bean ta dùng chú giải @ManagedBean trước khai báo
class. Tiếp theo là chú giải cho biết phạm vi tồn tại của Managed Bean. Portlet thêm feedback
chỉ gồm một trang html nên ta sử dụng @ViewScoped - phạm vi chỉ trong 1 trang.

2.

Tạo giao diện

Trong thư mục docroot/xhtml, tạo tập tin Feedback_Them.xhtml để tạo khai báo form thêm

mới một feedback.
<?xml version="1.0"?>
xmlns:f=" />xmlns:h=" />xmlns:liferay-ui=" />
Page 25 of 44


×